/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * ModifyCloudSliceTask response structure.
 * @class
 */
class ModifyCloudSliceTaskResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the slicing task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCloudModeration response structure.
 * @class
 */
class DescribeCloudModerationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the moderation task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Information about the status of the cloud moderation task. Idle: indicates the current task is idle; InProgress: indicates the current task is in progress; Exited: indicates the current task is being exited.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Subscription blocklist and allowlist.
         * @type {SubscribeModerationUserIds || null}
         */
        this.SubscribeStreamUserIds = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.Status = 'Status' in params ? params.Status : null;

        if (params.SubscribeStreamUserIds) {
            let obj = new SubscribeModerationUserIds();
            obj.deserialize(params.SubscribeStreamUserIds)
            this.SubscribeStreamUserIds = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Robot parameters
 * @class
 */
class AgentConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * The robot's UserId is used to enter a room and initiate tasks. [Note] This UserId cannot be repeated with the host viewer [UserId](https://cloud.tencent.com/document/product/647/46351#userid) in the current room. If multiple tasks are initiated in a room, the robot's UserId cannot be repeated, otherwise the previous task will be interrupted. The robot's UserId must be unique in the room.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * The verification signature corresponding to the robot's UserId, that is, UserId and UserSig are equivalent to the robot's login password to enter the room. For the specific calculation method, please refer to the TRTC calculation [UserSig](https://cloud.tencent.com/document/product/647/45910#UserSig) solution.
         * @type {string || null}
         */
        this.UserSig = null;

        /**
         * The UserId of the robot pulling the media stream. After filling in, the robot will pull the media stream of the UserId for real-time processing
         * @type {string || null}
         */
        this.TargetUserId = null;

        /**
         * If there is no streaming in the room for more than MaxIdleTime, the Service will automatically close the task. The default value is 60s.
         * @type {number || null}
         */
        this.MaxIdleTime = null;

        /**
         * Robot's welcome message
         * @type {string || null}
         */
        this.WelcomeMessage = null;

        /**
         * Intelligent interruption mode, the default value is 0, 0 means the server automatically interrupts, 1 means the server does not interrupt, and the client sends an interrupt signal to interrupt
         * @type {number || null}
         */
        this.InterruptMode = null;

        /**
         * Used when InterruptMode is 0, in milliseconds, with a default value of 500ms. This means that the server will interrupt when it detects a human voice that lasts for InterruptSpeechDuration milliseconds.
         * @type {number || null}
         */
        this.InterruptSpeechDuration = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserSig = 'UserSig' in params ? params.UserSig : null;
        this.TargetUserId = 'TargetUserId' in params ? params.TargetUserId : null;
        this.MaxIdleTime = 'MaxIdleTime' in params ? params.MaxIdleTime : null;
        this.WelcomeMessage = 'WelcomeMessage' in params ? params.WelcomeMessage : null;
        this.InterruptMode = 'InterruptMode' in params ? params.InterruptMode : null;
        this.InterruptSpeechDuration = 'InterruptSpeechDuration' in params ? params.InterruptSpeechDuration : null;

    }
}

/**
 * DescribeRecordingUsage response structure.
 * @class
 */
class DescribeRecordingUsageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The usage type. Each element of this parameter corresponds to an element of `UsageValue` in the order they are listed.
         * @type {Array.<string> || null}
         */
        this.UsageKey = null;

        /**
         * The usage data in each time unit.
         * @type {Array.<TrtcUsage> || null}
         */
        this.UsageList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UsageKey = 'UsageKey' in params ? params.UsageKey : null;

        if (params.UsageList) {
            this.UsageList = new Array();
            for (let z in params.UsageList) {
                let obj = new TrtcUsage();
                obj.deserialize(params.UsageList[z]);
                this.UsageList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Specifies the subscription stream allowlist or blocklist. The audio allowlist and blocklist cannot be set simultaneously, and this also applies to video. Additionally, up to 25 concurrently subscribed media streams are supported, and up to 24 video screens are supported in mixed stream scenarios. It is also supported to use the ".*$" wildcard for prefix matching of UserId in the blocklist and allowlist. Note that if there are user IDs in the room that match the wildcard rule, specific users are subscribed, causing the prefix rule to become ineffective.
 * @class
 */
class SubscribeModerationUserIds extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subscription audio stream allowlist. It specifies which UserIds' audio streams to subscribe to, for example, ["1", "2", "3"] indicates subscriptions to the audio streams of UserId 1, 2, and 3; ["1.*$"] indicates subscription to audio streams with UserId prefixes starting with 1. If this parameter is left unspecified, all audio streams in the room are subscribed to by default. The number of users in the subscription list should not exceed 32.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SubscribeAudioUserIds = null;

        /**
         * Subscription audio stream blocklist. It specifies which UserIds' audio streams not to subscribe to, for example, ["1", "2", "3"] indicates that the audio streams of UserId 1, 2, and 3 are not subscribed to; ["1.*$"] indicates that audio streams with UserId prefixes starting with 1 are not subscribed to. If this parameter is left unspecified, all audio streams in the room are subscribed to by default. The number of users in the subscription list should not exceed 32.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.UnSubscribeAudioUserIds = null;

        /**
         * Subscription video stream allowlist. It specifies which UserIds' video streams to subscribe to, for example, ["1", "2", "3"] indicates subscriptions to the video streams of UserId 1, 2, and 3; ["1.*$"] indicates subscription to video streams with UserId prefixes starting with 1. If this parameter is left unspecified, all video streams in the room are subscribed to by default. The number of users in the subscription list should not exceed 32.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SubscribeVideoUserIds = null;

        /**
         * Subscription video stream blocklist. It specifies which UserIds' video streams not to subscribe to, for example, ["1", "2", "3"] indicates that the video streams of UserId 1, 2, and 3 are not subscribed to; ["1.*$"] indicates that video streams with UserId prefixes starting with 1 are not subscribed to. If this parameter is left unspecified, all video streams in the room are subscribed to by default. The number of users in the subscription list should not exceed 32.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.UnSubscribeVideoUserIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubscribeAudioUserIds = 'SubscribeAudioUserIds' in params ? params.SubscribeAudioUserIds : null;
        this.UnSubscribeAudioUserIds = 'UnSubscribeAudioUserIds' in params ? params.UnSubscribeAudioUserIds : null;
        this.SubscribeVideoUserIds = 'SubscribeVideoUserIds' in params ? params.SubscribeVideoUserIds : null;
        this.UnSubscribeVideoUserIds = 'UnSubscribeVideoUserIds' in params ? params.UnSubscribeVideoUserIds : null;

    }
}

/**
 * Audio transcoding parameters
 * @class
 */
class AudioEncodeParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Audio Sample rate, Value range [48000, 44100], unit is Hz.
         * @type {number || null}
         */
        this.SampleRate = null;

        /**
         * Audio Channel number, Value range [1,2], 1 means Audio is Mono-channel, 2 means Audio is Dual-channel.
         * @type {number || null}
         */
        this.Channel = null;

        /**
         * Audio Bitrate, Value range [8,500], unit is kbps.
         * @type {number || null}
         */
        this.BitRate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SampleRate = 'SampleRate' in params ? params.SampleRate : null;
        this.Channel = 'Channel' in params ? params.Channel : null;
        this.BitRate = 'BitRate' in params ? params.BitRate : null;

    }
}

/**
 * The server controls the AI conversation robot to broadcast the specified text
 * @class
 */
class ServerPushText extends  AbstractModel {
    constructor(){
        super();

        /**
         * Server push broadcast text
         * @type {string || null}
         */
        this.Text = null;

        /**
         * Allow this text to interrupt the robot
         * @type {boolean || null}
         */
        this.Interrupt = null;

        /**
         * After the text is finished, whether to automatically close the conversation task
         * @type {boolean || null}
         */
        this.StopAfterPlay = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Text = 'Text' in params ? params.Text : null;
        this.Interrupt = 'Interrupt' in params ? params.Interrupt : null;
        this.StopAfterPlay = 'StopAfterPlay' in params ? params.StopAfterPlay : null;

    }
}

/**
 * Relay Recording Parameters
 * @class
 */
class McuRecordParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Relay Recording Mode
0/blank: Not currently supported, behavior undefined.
1: Disable recording.
2: Start recording (uses console's auto-recording template parameters. Reference: [Link to Documentation]).
3: Start recording (uses API-specified parameters).
Example: 2
         * @type {number || null}
         */
        this.UniRecord = null;

        /**
         * Recording Task Key
Identifies a recording task. This parameter allows merging multiple relay tasks into one recording file. If unspecified, only records the current relay task.
[Format: Up to 128 bytes; only letters (a-z, A-Z), numbers (0-9), underscores (_), and hyphens (-).]
Example: test_record_key_a
         * @type {string || null}
         */
        this.RecordKey = null;

        /**
         * [Valid only when UniRecord=3]
Recording Resume Wait Time
Corresponds to template parameter "Resume Wait Duration." Unit: seconds.
Range: 5-86400 (24 hours). Default: 30. Recording stops if idle longer than this value.
Example: 30
         * @type {number || null}
         */
        this.RecordWaitTime = null;

        /**
         * [Valid only when UniRecord=3]
Recording Output Formats
Corresponds to template parameter "File Format." Supported values: hls, mp4, aac. Default: mp4.
Note: mp4 and aac formats are mutually exclusive.
Example (MP4 only): ["mp4"]
Example (MP4 + HLS): ["mp4","hls"]
         * @type {Array.<string> || null}
         */
        this.RecordFormat = null;

        /**
         * [Valid only when UniRecord=3]
Single File Duration
Corresponds to template parameter "Max File Duration." Unit: minutes.
Range: 1-1440 (24 hours). Default: 1440. Applies only to mp4/aac. Actual duration is capped at 2GB file size.
Example: 1440
         * @type {number || null}
         */
        this.MaxMediaFileDuration = null;

        /**
         * [Valid only when UniRecord=3]
Recording Media Type
Corresponds to template parameter "Recording Format."
0: Audio+Video, 1: Audio only, 2: Video only. Output is the intersection of this setting and relay content.
Example: 0
         * @type {number || null}
         */
        this.StreamType = null;

        /**
         * Recording Filename Prefix
Filename prefix (<=64 bytes). Applies only to VOD storage.
*Format: Letters (a-z, A-Z), numbers (0-9), underscores (_), hyphens (-).*
Example: mcu_record_prefix
         * @type {string || null}
         */
        this.UserDefineRecordPrefix = null;

        /**
         * [Valid only when UniRecord=3]
Recording Storage Parameters
Corresponds to console parameter "Storage Location." Supports Tencent VOD or COS (exclusively).
Example: {"McuCloudVod":{"McuTencentVod":{"ExpireTime":86400}}}
         * @type {McuStorageParams || null}
         */
        this.McuStorageParams = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UniRecord = 'UniRecord' in params ? params.UniRecord : null;
        this.RecordKey = 'RecordKey' in params ? params.RecordKey : null;
        this.RecordWaitTime = 'RecordWaitTime' in params ? params.RecordWaitTime : null;
        this.RecordFormat = 'RecordFormat' in params ? params.RecordFormat : null;
        this.MaxMediaFileDuration = 'MaxMediaFileDuration' in params ? params.MaxMediaFileDuration : null;
        this.StreamType = 'StreamType' in params ? params.StreamType : null;
        this.UserDefineRecordPrefix = 'UserDefineRecordPrefix' in params ? params.UserDefineRecordPrefix : null;

        if (params.McuStorageParams) {
            let obj = new McuStorageParams();
            obj.deserialize(params.McuStorageParams)
            this.McuStorageParams = obj;
        }

    }
}

/**
 * The custom layout parameters.
 * @class
 */
class MixLayout extends  AbstractModel {
    constructor(){
        super();

        /**
         * The Y axis of the window’s top-left corner. Value range: [0, 1920]. The value cannot be larger than the canvas height.
         * @type {number || null}
         */
        this.Top = null;

        /**
         * The X axis of the window’s top-left corner. Value range: [0, 1920]. The value cannot be larger than the canvas width.
         * @type {number || null}
         */
        this.Left = null;

        /**
         * The relative width of the window. Value range: [0, 1920]. The sum of the values of this parameter and `Left` cannot exceed the canvas width.
         * @type {number || null}
         */
        this.Width = null;

        /**
         * The relative height of the window. Value range: [0, 1920]. The sum of the values of this parameter and `Top` cannot exceed the canvas height.
         * @type {number || null}
         */
        this.Height = null;

        /**
         * The user ID (string) of the anchor whose video is shown in the window. If you do not set this parameter, anchors’ videos will be shown in their room entry sequence.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * The degree of transparency of the canvas. Value range: [0, 255]. 0 means fully opaque, and 255 means fully transparent.
         * @type {number || null}
         */
        this.Alpha = null;

        /**
         * 0: Stretch. In this mode, the image is stretched to fill the space available. The whole image is visible after scaling. However, if the original aspect ratio is different from the target, the image may be distorted.

1: Crop (default). In this mode, if the original aspect ratio is different from the target, the image will be cropped according to the target before being stretched to fill the space available. The image will not be distorted.

2: Blank. This mode stretches the image while keeping its original aspect ratio. If the original aspect ratio is different from the target, there may be blank spaces to the top and bottom or to the left and right of the window.

3: Smart stretch. This mode is similar to the crop mode, except that it restricts cropping to 20% of the image’s width or height at most.
         * @type {number || null}
         */
        this.RenderMode = null;

        /**
         * The type of the stream subscribed to.
0: Primary stream (default)
1: Substream
         * @type {number || null}
         */
        this.MediaId = null;

        /**
         * The image layer. 0 is the default value and means the bottommost layer.
         * @type {number || null}
         */
        this.ImageLayer = null;

        /**
         * The URL of the background image for a window. The image must be in JPG or PNG format and cannot be larger than 5 MB. If the image’s aspect ratio is different from that of the window, the image will be rendered according to the value of `RenderMode`.
         * @type {string || null}
         */
        this.SubBackgroundImage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Top = 'Top' in params ? params.Top : null;
        this.Left = 'Left' in params ? params.Left : null;
        this.Width = 'Width' in params ? params.Width : null;
        this.Height = 'Height' in params ? params.Height : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.Alpha = 'Alpha' in params ? params.Alpha : null;
        this.RenderMode = 'RenderMode' in params ? params.RenderMode : null;
        this.MediaId = 'MediaId' in params ? params.MediaId : null;
        this.ImageLayer = 'ImageLayer' in params ? params.ImageLayer : null;
        this.SubBackgroundImage = 'SubBackgroundImage' in params ? params.SubBackgroundImage : null;

    }
}

/**
 * The video parameters for relaying.
 * @class
 */
class McuVideoParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The video encoding parameters.
         * @type {VideoEncode || null}
         */
        this.VideoEncode = null;

        /**
         * The layout parameters.
         * @type {McuLayoutParams || null}
         */
        this.LayoutParams = null;

        /**
         * The canvas color. Below are the values for some common colors:
Red: 0xcc0033
Yellow: 0xcc9900
Green: 0xcccc33
Blue: 0x99CCFF
Black: 0x000000
White: 0xFFFFFF
Grey: 0x999999
         * @type {string || null}
         */
        this.BackGroundColor = null;

        /**
         * The URL of the background image for the canvas. This parameter has a higher priority than `BackGroundColor`.
         * @type {string || null}
         */
        this.BackgroundImageUrl = null;

        /**
         * The watermark information for the mixed stream.
         * @type {Array.<McuWaterMarkParams> || null}
         */
        this.WaterMarkList = null;

        /**
         * Background image display mode during output: 0 for crop, 1 for scale and display with black background, 2 for proportional scaling. The backend default is proportional scaling.
         * @type {number || null}
         */
        this.BackgroundRenderMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.VideoEncode) {
            let obj = new VideoEncode();
            obj.deserialize(params.VideoEncode)
            this.VideoEncode = obj;
        }

        if (params.LayoutParams) {
            let obj = new McuLayoutParams();
            obj.deserialize(params.LayoutParams)
            this.LayoutParams = obj;
        }
        this.BackGroundColor = 'BackGroundColor' in params ? params.BackGroundColor : null;
        this.BackgroundImageUrl = 'BackgroundImageUrl' in params ? params.BackgroundImageUrl : null;

        if (params.WaterMarkList) {
            this.WaterMarkList = new Array();
            for (let z in params.WaterMarkList) {
                let obj = new McuWaterMarkParams();
                obj.deserialize(params.WaterMarkList[z]);
                this.WaterMarkList.push(obj);
            }
        }
        this.BackgroundRenderMode = 'BackgroundRenderMode' in params ? params.BackgroundRenderMode : null;

    }
}

/**
 * DescribeTRTCRealTimeScaleData request structure.
 * @class
 */
class DescribeTRTCRealTimeScaleDataRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User SDKAppId (e.g., 1400xxxxxx)
         * @type {string || null}
         */
        this.SdkAppId = null;

        /**
         * Start time, unix timestamp, Unit: seconds (Query time range depends on the function version of the monitoring dashboard, premium edition can query up to 1 hours)
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time, unix timestamp, Unit: seconds
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Room ID
         * @type {string || null}
         */
        this.RoomId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;

    }
}

/**
 * StartAIConversation response structure.
 * @class
 */
class StartAIConversationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Used to uniquely identify a conversation task.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StartAIConversation request structure.
 * @class
 */
class StartAIConversationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TRTC's [SdkAppId](https://cloud.tencent.com/document/product/647/46351#sdkappid) is the same as the SdkAppId used by the room that starts the conversation task.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * TRTC's [RoomId](https://cloud.tencent.com/document/product/647/46351#roomid), which indicates the room number where the conversation task is started.
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * Robot parameters
         * @type {AgentConfig || null}
         */
        this.AgentConfig = null;

        /**
         * The unique ID passed in by the caller can be used by the client to prevent repeated task initiation and to query the task status through this field.
         * @type {string || null}
         */
        this.SessionId = null;

        /**
         * The type of TRTC room number. 0 represents a numeric room number, and 1 represents a string room number. If not filled in, the default is a numeric room number.
         * @type {number || null}
         */
        this.RoomIdType = null;

        /**
         * Speech recognition configuration.
         * @type {STTConfig || null}
         */
        this.STTConfig = null;

        /**
         * LLM configuration. It must comply with the openai specification and be a JSON string. The example is as follows: <pre> { <br> &emsp; "LLMType": "Large model type", // String required, such as: "openai" <br> &emsp; "Model": "Your model name", // String required, specify the model to be used<br> "APIKey": "Your LLM API key", // String required <br> &emsp; "APIUrl": "https://api.xxx.com/chat/completions", // String required, URL for LLM API access<br> &emsp; "Streaming": true // Boolean optional, specify whether to use streaming<br> &emsp;} </pre>
         * @type {string || null}
         */
        this.LLMConfig = null;

        /**
         * TTS configuration, which is a JSON string. The Tencent Cloud TTS example is as follows: <pre>{ <br> &emsp; "AppId": your application ID, // Integer Required<br> &emsp; "TTSType": "TTS type", // String TTS type, fixed to "tencent"<br> &emsp; "SecretId": "Your key ID", // String Required<br> &emsp; "SecretKey": "Your keyKey", // String Required<br> &emsp; "VoiceType": 101001, // Integer Required, voice ID, including standard voice and premium voice. Premium voice has higher fidelity and different price from standard voice. For details, please refer to <a href="https://cloud.tencent.com/document/product/1073/34112">Overview of Speech Synthesis Billing</a>. For a complete list of timbre IDs, see <a href="https://cloud.tencent.com/document/product/1073/92668#55924b56-1a73-4663-a7a1-a8dd82d6e823">List of speech synthesis timbre IDs</a>. <br> &emsp; "Speed": 1.25, // Integer Optional, speaking speed, range: [-2, 6], corresponding to different speaking speeds: -2: 0.6 times -1: 0.8 times 0: 1.0 times (default) 1: 1.2 times 2: 1.5 times 6: 2.5 times If a more detailed speaking speed is required, 2 decimal places can be retained, such as 0.5/1.25/2.81, etc. For the conversion between parameter value and actual speech speed, please refer to <a href="https://sdk-1300466766.cos.ap-shanghai.myqcloud.com/sample/speed_sample.tar.gz">Speed Conversion</a><br> &emsp; "Volume": 5, // Integer Optional, volume size, range: [0, 10], corresponding to 11 levels of volume, the default value is 0, representing normal volume. <br> &emsp; "PrimaryLanguage": "zh-CN" // String Optional, primary language<br> &emsp;}</pre>
         * @type {string || null}
         */
        this.TTSConfig = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;

        if (params.AgentConfig) {
            let obj = new AgentConfig();
            obj.deserialize(params.AgentConfig)
            this.AgentConfig = obj;
        }
        this.SessionId = 'SessionId' in params ? params.SessionId : null;
        this.RoomIdType = 'RoomIdType' in params ? params.RoomIdType : null;

        if (params.STTConfig) {
            let obj = new STTConfig();
            obj.deserialize(params.STTConfig)
            this.STTConfig = obj;
        }
        this.LLMConfig = 'LLMConfig' in params ? params.LLMConfig : null;
        this.TTSConfig = 'TTSConfig' in params ? params.TTSConfig : null;

    }
}

/**
 * DescribeTRTCMarketScaleData request structure.
 * @class
 */
class DescribeTRTCMarketScaleDataRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User SDKAppId
         * @type {string || null}
         */
        this.SdkAppId = null;

        /**
         * Query start time, format is YYYY-MM-DD. (The query time range depends on the monitoring dashboard function version, the premium edition can query up to 60 days)
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Query end time, format is YYYY-MM-DD.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * The granularity of the returned data, which can be set to the following values:
 d: by day. This returns data for the entire UTC day of the query time range.
 h: by hour. This returns data for the entire UTC hour of the query time range.
         * @type {string || null}
         */
        this.Period = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Period = 'Period' in params ? params.Period : null;

    }
}

/**
 * The SEI parameters for audio volume layout. You can specify the `AppData` and `PayloadType`.
This parameter may be empty, in which case the default SEI parameters for audio volume layout will be used.
 * @class
 */
class McuLayoutVolume extends  AbstractModel {
    constructor(){
        super();

        /**
         * The application data, which will be embedded in the `app_data` field of the custom SEI. It must be shorter than 4,096 characters.
         * @type {string || null}
         */
        this.AppData = null;

        /**
         * The payload type of the SEI message. The default is 100. Value range: 100-254 (244 is used internally by Tencent Cloud for timestamps).
         * @type {number || null}
         */
        this.PayloadType = null;

        /**
         * The SEI sending interval (milliseconds). The default value is 1000.
         * @type {number || null}
         */
        this.Interval = null;

        /**
         * Valid values: `1`: SEI is guaranteed when keyframes are sent; `0` (default): SEI is not guaranteed when keyframes are sent.
         * @type {number || null}
         */
        this.FollowIdr = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AppData = 'AppData' in params ? params.AppData : null;
        this.PayloadType = 'PayloadType' in params ? params.PayloadType : null;
        this.Interval = 'Interval' in params ? params.Interval : null;
        this.FollowIdr = 'FollowIdr' in params ? params.FollowIdr : null;

    }
}

/**
 * SetUserBlocked request structure.
 * @class
 */
class SetUserBlockedRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The application ID.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The room ID (number).
         * @type {number || null}
         */
        this.RoomId = null;

        /**
         * The user ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Controls the activation state of audio and video.
0: Enable audio and video,
1: Disable audio and video,
2: Disable audio only,
3: Disable video only.
         * @type {number || null}
         */
        this.IsMute = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.IsMute = 'IsMute' in params ? params.IsMute : null;

    }
}

/**
 * DescribeUserEvent request structure.
 * @class
 */
class DescribeUserEventRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of a call, whose format is `SdkAppId_CreateTime`, such as `1400xxxxxx_218695_1590065777`. `createTime` is the UNIX timestamp (seconds) when the room was created. Its value can be obtained using the [DescribeRoomInfo](https://intl.cloud.tencent.com/document/product/647/44050?from_cn_redirect=1) API.
         * @type {string || null}
         */
        this.CommId = null;

        /**
         * The start time, which is a Unix timestamp (seconds) in local time, such as `1590065777`.
Note: Only data in the last 14 days can be queried.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * The end time, which is a Unix timestamp (seconds) in local time, such as `1590065877`.
Note: If you pass in an end time later than the room end time, the room end time will be used.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * The user ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * The room ID, such as `223`.
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * The application ID, such as `1400xxxxxx`.
         * @type {number || null}
         */
        this.SdkAppId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CommId = 'CommId' in params ? params.CommId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;

    }
}

/**
 * DeleteCloudModeration request structure.
 * @class
 */
class DeleteCloudModerationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * SDKAppId of TRTC, which is the same as the SDKAppId corresponding to the TRTC room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * Unique ID of the moderation task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * SetUserBlocked response structure.
 * @class
 */
class SetUserBlockedResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * 
 * @class
 */
class WaterMarkChar extends  AbstractModel {
    constructor(){
        super();

        /**
         * The Y coordinate of the text watermark from the top left.
         * @type {number || null}
         */
        this.Top = null;

        /**
         * The X coordinate of the text watermark from the top left.
         * @type {number || null}
         */
        this.Left = null;

        /**
         * The watermark width (pixels).
         * @type {number || null}
         */
        this.Width = null;

        /**
         * The watermark height (pixels).
         * @type {number || null}
         */
        this.Height = null;

        /**
         * The text.
         * @type {string || null}
         */
        this.Chars = null;

        /**
         * The font size (pixels). The default value is `14`.
         * @type {number || null}
         */
        this.FontSize = null;

        /**
         * The text color. The default color is white.
         * @type {string || null}
         */
        this.FontColor = null;

        /**
         * The background color. If this parameter is empty, the background will be transparent (default).
         * @type {string || null}
         */
        this.BackGroundColor = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Top = 'Top' in params ? params.Top : null;
        this.Left = 'Left' in params ? params.Left : null;
        this.Width = 'Width' in params ? params.Width : null;
        this.Height = 'Height' in params ? params.Height : null;
        this.Chars = 'Chars' in params ? params.Chars : null;
        this.FontSize = 'FontSize' in params ? params.FontSize : null;
        this.FontColor = 'FontColor' in params ? params.FontColor : null;
        this.BackGroundColor = 'BackGroundColor' in params ? params.BackGroundColor : null;

    }
}

/**
 * DescribeTrtcRoomUsage response structure.
 * @class
 */
class DescribeTrtcRoomUsageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The usage data grouped by room, in CSV format.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Data = 'Data' in params ? params.Data : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StopPublishCdnStream response structure.
 * @class
 */
class StopPublishCdnStreamResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The task ID.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The information of an error event (the possible cause of an abnormal user experience).
 * @class
 */
class AbnormalEvent extends  AbstractModel {
    constructor(){
        super();

        /**
         * The error event ID. For details, see https://www.tencentcloud.com/document/product/647/37906?has_map=1
         * @type {number || null}
         */
        this.AbnormalEventId = null;

        /**
         * The remote user ID. If this parameter is empty, it indicates that the error event is not associated with a remote user.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PeerId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AbnormalEventId = 'AbnormalEventId' in params ? params.AbnormalEventId : null;
        this.PeerId = 'PeerId' in params ? params.PeerId : null;

    }
}

/**
 * DescribeScaleInfo response structure.
 * @class
 */
class DescribeScaleInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of records returned.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The returned data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ScaleInfomation> || null}
         */
        this.ScaleList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.ScaleList) {
            this.ScaleList = new Array();
            for (let z in params.ScaleList) {
                let obj = new ScaleInfomation();
                obj.deserialize(params.ScaleList[z]);
                this.ScaleList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The room and user number.
 * @class
 */
class ScaleInfomation extends  AbstractModel {
    constructor(){
        super();

        /**
         * Start time for each day
         * @type {number || null}
         */
        this.Time = null;

        /**
         * The number of users. If a user enters a room multiple times, it will be counted as one user.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UserNumber = null;

        /**
         * The number of room entries. Every time a user enters a room, it will be counted as one room entry.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UserCount = null;

        /**
         * The total number of rooms of the application on a day.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RoomNumbers = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Time = 'Time' in params ? params.Time : null;
        this.UserNumber = 'UserNumber' in params ? params.UserNumber : null;
        this.UserCount = 'UserCount' in params ? params.UserCount : null;
        this.RoomNumbers = 'RoomNumbers' in params ? params.RoomNumbers : null;

    }
}

/**
 * The information of the relaying robot in the room.
 * @class
 */
class AgentParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The [user ID](https://intl.cloud.tencent.com/document/product/647/37714) of the relaying robot in the TRTC room, which cannot be the same as a user ID already in use. We recommend you include the room ID in this user ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * The signature (similar to a login password) required for the relaying robot to enter the room. For information on how to calculate the signature, see [What is UserSig?](https://intl.cloud.tencent.com/document/product/647/38104). |
         * @type {string || null}
         */
        this.UserSig = null;

        /**
         * The timeout period (seconds) for relaying to stop automatically after all the users whose streams are mixed leave the room. The value cannot be smaller than 5 or larger than 86400 (24 hours). Default value: 30.
         * @type {number || null}
         */
        this.MaxIdleTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserSig = 'UserSig' in params ? params.UserSig : null;
        this.MaxIdleTime = 'MaxIdleTime' in params ? params.MaxIdleTime : null;

    }
}

/**
 * ControlAIConversation response structure.
 * @class
 */
class ControlAIConversationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StopAITranscription request structure.
 * @class
 */
class StopAITranscriptionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Uniquely identifies a transcription task.
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * Video transcoding parameters
 * @class
 */
class VideoEncodeParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Width. Value range [0,1920], unit is pixel value.
         * @type {number || null}
         */
        this.Width = null;

        /**
         * Height. Value range [0,1080], unit is pixel value.
         * @type {number || null}
         */
        this.Height = null;

        /**
         * Frame Rate. Value range [1,60], indicating that the frame rate can be selected from 1 to 60fps.
         * @type {number || null}
         */
        this.Fps = null;

        /**
         * Bitrate. Value range [1,10000], unit is kbps.
         * @type {number || null}
         */
        this.BitRate = null;

        /**
         * Gop. Value range [1,2], unit is second.
         * @type {number || null}
         */
        this.Gop = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Width = 'Width' in params ? params.Width : null;
        this.Height = 'Height' in params ? params.Height : null;
        this.Fps = 'Fps' in params ? params.Fps : null;
        this.BitRate = 'BitRate' in params ? params.BitRate : null;
        this.Gop = 'Gop' in params ? params.Gop : null;

    }
}

/**
 * UpdateAIConversation response structure.
 * @class
 */
class UpdateAIConversationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserEvent response structure.
 * @class
 */
class DescribeUserEventResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The event list. An empty array will be returned if no data is obtained.
         * @type {Array.<EventList> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new EventList();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The video encoding parameters.
 * @class
 */
class VideoEncode extends  AbstractModel {
    constructor(){
        super();

        /**
         * The width of the output stream (pixels). This parameter is required if audio and video are relayed. Value range: [0, 1920].
         * @type {number || null}
         */
        this.Width = null;

        /**
         * The height of the output stream (pixels). This parameter is required if audio and video are relayed. Value range: [0, 1080].
         * @type {number || null}
         */
        this.Height = null;

        /**
         * The frame rate (fps) of the output stream. This parameter is required if audio and video are relayed. Value range: [0, 60].
         * @type {number || null}
         */
        this.Fps = null;

        /**
         * The bitrate (Kbps) of the output stream. This parameter is required if audio and video are relayed. Value range: [0, 10000].
         * @type {number || null}
         */
        this.BitRate = null;

        /**
         * The GOP (seconds) of the output stream. This parameter is required if audio and video are relayed. Value range: [1, 5].
         * @type {number || null}
         */
        this.Gop = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Width = 'Width' in params ? params.Width : null;
        this.Height = 'Height' in params ? params.Height : null;
        this.Fps = 'Fps' in params ? params.Fps : null;
        this.BitRate = 'BitRate' in params ? params.BitRate : null;
        this.Gop = 'Gop' in params ? params.Gop : null;

    }
}

/**
 * DescribeCallDetailInfo request structure.
 * @class
 */
class DescribeCallDetailInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of a call, whose format is `SdkAppId_CreateTime`, such as `1400xxxxxx_218695_1590065777`. `createTime` is the UNIX timestamp (seconds) when the room was created. Its value can be obtained using the [DescribeRoomInfo](https://intl.cloud.tencent.com/document/product/647/44050?from_cn_redirect=1) API.
         * @type {string || null}
         */
        this.CommId = null;

        /**
         * The start time, which is a Unix timestamp (seconds) in local time, such as `1590065777`.
Note: Only data in the last 14 days can be queried.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * The end time, which is a Unix timestamp (seconds) in local time, such as `1590065877`.
Note: If `DataType` is not null, the end time and start time cannot be more than one hour apart; if `DataType` is null, the end time and start time cannot be more than four hours apart.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * The application ID, such as `1400xxxxxx`.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The users to query. If you do not specify this, the data of six users will be returned.
         * @type {Array.<string> || null}
         */
        this.UserIds = null;

        /**
         * The metrics to query. If you do not specify this, only the user list will be returned. If you pass in `all`, all metrics will be returned.
`appCpu`: The CPU utilization of the application.
`sysCpu`: The CPU utilization of the system.
`aBit`: The upstream/downstream audio bitrate (bps).
`aBlock`: The audio stutter duration (ms).
`bigvBit`: The upstream/downstream video bitrate (bps).
`bigvCapFps`: The frame rate for capturing videos.
`bigvEncFps`: The frame rate for sending videos.
`bigvDecFps`: The rendering frame rate.
`bigvBlock`: The video stutter duration (ms).
`aLoss`: The upstream/downstream audio packet loss.
`bigvLoss`: The upstream/downstream video packet loss.
`bigvWidth`: The upstream/downstream resolution (width).
`bigvHeight`: The upstream/downstream resolution (height).
         * @type {Array.<string> || null}
         */
        this.DataType = null;

        /**
         * The page number. The default is 0.
Note: If `PageNumber` or `PageSize` is not specified, six records will be returned.
         * @type {number || null}
         */
        this.PageNumber = null;

        /**
         * The number of records per page. The default is `6`.
Value range: 1-100.
Note: If `DataType` is not null, the length of the array `UserIds` and the value of `PageSize` cannot exceed `6`.
If `DataType` is null, the length of the array `UserIds` and the value of `PageSize` cannot exceed `100`.
         * @type {number || null}
         */
        this.PageSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CommId = 'CommId' in params ? params.CommId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.UserIds = 'UserIds' in params ? params.UserIds : null;
        this.DataType = 'DataType' in params ? params.DataType : null;
        this.PageNumber = 'PageNumber' in params ? params.PageNumber : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;

    }
}

/**
 * CreateCloudModeration response structure.
 * @class
 */
class CreateCloudModerationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID assigned by the cloud moderation service. It is a unique identifier for the lifecycle of a moderation task, which loses its significance after the task is completed. The task ID needs to be retained by the business system as a parameter for future operations related to this task.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTRTCMarketScaleData response structure.
 * @class
 */
class DescribeTRTCMarketScaleDataResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * TRTC Data Dashboard output parameters
         * @type {TRTCDataResult || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            let obj = new TRTCDataResult();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Translation config
 * @class
 */
class TranslationConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Target language, target language list (ISO 639-1).
         * @type {Array.<string> || null}
         */
        this.TargetLanguages = null;

        /**
         * 1: Only text translation, 2: Voice simultaneous interpretation.
         * @type {number || null}
         */
        this.Mode = null;

        /**
         * Voice simultaneous interpretation configuration: When enabling simultaneous interpretation, this parameter needs to be passed.
         * @type {TTSConfig || null}
         */
        this.TTSConfig = null;

        /**
         * Translation terminology.
         * @type {Array.<Terminology> || null}
         */
        this.Terminology = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TargetLanguages = 'TargetLanguages' in params ? params.TargetLanguages : null;
        this.Mode = 'Mode' in params ? params.Mode : null;

        if (params.TTSConfig) {
            let obj = new TTSConfig();
            obj.deserialize(params.TTSConfig)
            this.TTSConfig = obj;
        }

        if (params.Terminology) {
            this.Terminology = new Array();
            for (let z in params.Terminology) {
                let obj = new Terminology();
                obj.deserialize(params.Terminology[z]);
                this.Terminology.push(obj);
            }
        }

    }
}

/**
 * Mcu Relay Recording and Tencent VOD Parameters
 * @class
 */
class McuTencentVod extends  AbstractModel {
    constructor(){
        super();

        /**
         * Post-Upload Task Processing
Automatically initiates task flows after media uploads complete. Value = Task flow template name.
VOD supports creating and naming task flow templates.
Example: template_name
         * @type {string || null}
         */
        this.Procedure = null;

        /**
         * Media File Expiration Time
Absolute expiration time from current timestamp.
86400 = 1 day retention
0 = permanent storage (default)
Example: 86400
         * @type {number || null}
         */
        this.ExpireTime = null;

        /**
         * Upload Region Specification
For users requiring specific upload regions.
Example: ap-shanghai
         * @type {string || null}
         */
        this.StorageRegion = null;

        /**
         * Category ID
Manages media classification. Obtain via category creation API.
Default: 0 (Other category)
Example: 0
         * @type {number || null}
         */
        this.ClassId = null;

        /**
         * VOD SubAppId
Required when accessing sub-application resources. Leave empty otherwise.
Example: 0
         * @type {number || null}
         */
        this.SubAppId = null;

        /**
         * Task Flow Context
Passed through in task completion callbacks.
Example: user_custom
         * @type {string || null}
         */
        this.SessionContext = null;

        /**
         * Upload Context
Passed through in upload completion callbacks.
Example: user_custom
         * @type {string || null}
         */
        this.SourceContext = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Procedure = 'Procedure' in params ? params.Procedure : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.StorageRegion = 'StorageRegion' in params ? params.StorageRegion : null;
        this.ClassId = 'ClassId' in params ? params.ClassId : null;
        this.SubAppId = 'SubAppId' in params ? params.SubAppId : null;
        this.SessionContext = 'SessionContext' in params ? params.SessionContext : null;
        this.SourceContext = 'SourceContext' in params ? params.SourceContext : null;

    }
}

/**
 * DescribeWebRecord response structure.
 * @class
 */
class DescribeWebRecordResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * 1: Recording
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Returns when querying using RecordId
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Returned when querying using TaskId
         * @type {string || null}
         */
        this.RecordId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RecordId = 'RecordId' in params ? params.RecordId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserInfo request structure.
 * @class
 */
class DescribeUserInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of a call, whose format is `SdkAppId_CreateTime`, such as `1400xxxxxx_218695_1590065777`. `createTime` is the UNIX timestamp (seconds) when the room was created. Its value can be obtained using the [DescribeRoomInfo](https://intl.cloud.tencent.com/document/product/647/44050?from_cn_redirect=1) API.
         * @type {string || null}
         */
        this.CommId = null;

        /**
         * The start time, which is a Unix timestamp (seconds) in local time, such as `1590065777`.
Note: Only data in the last 14 days can be queried.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * The end time, which is a Unix timestamp (seconds) in local time, such as `1590065877`.
Note: The end and start time cannot be more than four hours apart.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * The application ID, such as `1400xxxxxx`.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The users to query. If you do not specify this, the information of six users will be returned.
Array length: 1-100.
         * @type {Array.<string> || null}
         */
        this.UserIds = null;

        /**
         * The page number. The default is 0.
Note: If `PageNumber` or `PageSize` is not specified, six records will be returned.
         * @type {number || null}
         */
        this.PageNumber = null;

        /**
         * The number of records per page. The default is `6`.
Array length: 1-100.
         * @type {number || null}
         */
        this.PageSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CommId = 'CommId' in params ? params.CommId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.UserIds = 'UserIds' in params ? params.UserIds : null;
        this.PageNumber = 'PageNumber' in params ? params.PageNumber : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;

    }
}

/**
 * DeleteCloudModeration response structure.
 * @class
 */
class DeleteCloudModerationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the moderation task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRelayUsage request structure.
 * @class
 */
class DescribeRelayUsageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The start date in the format of YYYY-MM-DD.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * The end date in the format of YYYY-MM-DD.
The period queried per request cannot be longer than 31 days.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * The `SDKAppID` of the TRTC application to which the target room belongs. If you do not specify this parameter, the usage statistics of all TRTC applications under the current account will be returned.
         * @type {number || null}
         */
        this.SdkAppId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;

    }
}

/**
 * DismissRoom response structure.
 * @class
 */
class DismissRoomResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The cloud storage information.
 * @class
 */
class CloudStorage extends  AbstractModel {
    constructor(){
        super();

        /**
         * The cloud storage provider.
`0`: Tencent Cloud COS; `1`: AWS storage. Other vendors are not supported currently.
         * @type {number || null}
         */
        this.Vendor = null;

        /**
         * The region of cloud storage.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * The storage bucket.
         * @type {string || null}
         */
        this.Bucket = null;

        /**
         * The access_key of the cloud storage account.
         * @type {string || null}
         */
        this.AccessKey = null;

        /**
         * The secret_key of the cloud storage account.
         * @type {string || null}
         */
        this.SecretKey = null;

        /**
         * The bucket to save data, which is an array of strings that can contain letters (a-z and A-Z), numbers (0-9), underscores (_), and hyphens (-). For example, if the value of this parameter is `["prefix1", "prefix2"]`, the recording file `xxx.m3u8` will be saved as `prefix1/prefix2/TaskId/xxx.m3u8`.
         * @type {Array.<string> || null}
         */
        this.FileNamePrefix = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Vendor = 'Vendor' in params ? params.Vendor : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Bucket = 'Bucket' in params ? params.Bucket : null;
        this.AccessKey = 'AccessKey' in params ? params.AccessKey : null;
        this.SecretKey = 'SecretKey' in params ? params.SecretKey : null;
        this.FileNamePrefix = 'FileNamePrefix' in params ? params.FileNamePrefix : null;

    }
}

/**
 * DescribeTrtcUsage response structure.
 * @class
 */
class DescribeTrtcUsageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The usage type. Each element of this parameter corresponds to an element of `UsageValue` in the order they are listed.
         * @type {Array.<string> || null}
         */
        this.UsageKey = null;

        /**
         * The usage data in each time unit.
         * @type {Array.<TrtcUsage> || null}
         */
        this.UsageList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UsageKey = 'UsageKey' in params ? params.UsageKey : null;

        if (params.UsageList) {
            this.UsageList = new Array();
            for (let z in params.UsageList) {
                let obj = new TrtcUsage();
                obj.deserialize(params.UsageList[z]);
                this.UsageList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The quality data, which consists of the `time` and `value` parameters.
 * @class
 */
class TimeValue extends  AbstractModel {
    constructor(){
        super();

        /**
         * The UNIX timestamp (seconds), such as `1590065877`.
         * @type {number || null}
         */
        this.Time = null;

        /**
         * The metric value. For example, if the video capturing frame rate (`bigvCapFps`) at the time `1590065877` is `0`, the value of this parameter will be `0`.
         * @type {number || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Time = 'Time' in params ? params.Time : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * CreateCloudRecording response structure.
 * @class
 */
class CreateCloudRecordingResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The task ID assigned by the recording service, which uniquely identifies a recording process and becomes invalid after a recording task ends. After a recording task starts, if you want to perform other actions on the task, you need to specify the task ID when making API requests.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeWebRecord request structure.
 * @class
 */
class DescribeWebRecordRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The task ID returned when starting web-page recording
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * SdkAppId passed when initiating web-page recording
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * RecordId passed when initiating recording. When passing this value, you need to pass SdkAppId
         * @type {string || null}
         */
        this.RecordId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RecordId = 'RecordId' in params ? params.RecordId : null;

    }
}

/**
 * DescribeTRTCRealTimeScaleData response structure.
 * @class
 */
class DescribeTRTCRealTimeScaleDataResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * TRTC Real- Time Monitoring
 output parameter
         * @type {TRTCDataResult || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            let obj = new TRTCDataResult();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRoomInfo request structure.
 * @class
 */
class DescribeRoomInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The application ID, such as `1400xxxxxx`.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The start time, which is a Unix timestamp (seconds) in local time, such as `1590065777`.
Note: Only data in the last 14 days can be queried.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * The end time, which is a Unix timestamp (seconds) in local time, such as `1590065877`.
Note: The end and start time cannot be more than 24 hours apart.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * The room ID, such as `223`.
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * The page number. The default is 0.
Note: If `PageNumber` or `PageSize` is not specified, 10 records will be returned.
         * @type {number || null}
         */
        this.PageNumber = null;

        /**
         * The number of records per page. The default is `10`.
Value range: 1-100.
         * @type {number || null}
         */
        this.PageSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.PageNumber = 'PageNumber' in params ? params.PageNumber : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;

    }
}

/**
 * The storage parameters.
 * @class
 */
class StorageParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The account information for third-party storage. Please note that if you save files to COS, a recording-to-COS fee will be incurred. For details, see the document "Billing of On-Cloud Recording". If you save files to VOD, there won't be such a fee.
         * @type {CloudStorage || null}
         */
        this.CloudStorage = null;

        /**
         * The account information for VOD storage.
         * @type {CloudVod || null}
         */
        this.CloudVod = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CloudStorage) {
            let obj = new CloudStorage();
            obj.deserialize(params.CloudStorage)
            this.CloudStorage = obj;
        }

        if (params.CloudVod) {
            let obj = new CloudVod();
            obj.deserialize(params.CloudVod)
            this.CloudVod = obj;
        }

    }
}

/**
 * The VOD parameters.
 * @class
 */
class CloudVod extends  AbstractModel {
    constructor(){
        super();

        /**
         * The Tencent Cloud VOD parameters.
         * @type {TencentVod || null}
         */
        this.TencentVod = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TencentVod) {
            let obj = new TencentVod();
            obj.deserialize(params.TencentVod)
            this.TencentVod = obj;
        }

    }
}

/**
 * Information about Tencent COS and third-party cloud storage accounts.
 * @class
 */
class CloudSliceStorage extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information about Tencent COS and third-party cloud storage accounts.
0: Tencent COS.
1: AWS S3.
2: Alibaba Cloud OSS.
Example value: 0.
         * @type {number || null}
         */
        this.Vendor = null;

        /**
         * [Region information](https://www.tencentcloud.comom/document/product/436/6224?from_cn_redirect=1#.E5.9C.B0.E5.9F.9F) of Tencent COS.
Example value: cn-shanghai-1.
[Region information](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-regions) of AWS S3.
Example value: ap-southeast-3.	
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Cloud bucket name.
         * @type {string || null}
         */
        this.Bucket = null;

        /**
         * access_key account information of the cloud storage.
To store files to Tencent COS, visit https://console.cloud.tencent.com/cam/capi to view or create the SecretId value corresponding to the key fields in the link.
Example value: test-accesskey.
         * @type {string || null}
         */
        this.AccessKey = null;

        /**
         * secret_key account information of the cloud storage.
To store files to Tencent COS, visit https://console.cloud.tencent.com/cam/capi to view or create the SecretKey value corresponding to the key fields in the link.
Example value: test-secretkey.
         * @type {string || null}
         */
        this.SecretKey = null;

        /**
         * Specified location of the cloud bucket, which consists of an array of strings. Value range for the strings is lowercase letters (a–z), uppercase letters (A–Z), digits (0–9), and special characters (_-). For example, under the feature of ["prefix1", "prefix2"], the audio slicing file (xxx.mp3) is stored as prefix1/prefix2/{taskId}/{userId}/audios/{sdkappid}_{roomId}_{userid}_{UTC time}.ogg, while the video frame is stored as prefix1/prefix2/{taskId}/{userId}/images/{sdkappid}_{roomId}_{userid}_{UTC time}.png.
         * @type {Array.<string> || null}
         */
        this.FileNamePrefix = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Vendor = 'Vendor' in params ? params.Vendor : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Bucket = 'Bucket' in params ? params.Bucket : null;
        this.AccessKey = 'AccessKey' in params ? params.AccessKey : null;
        this.SecretKey = 'SecretKey' in params ? params.SecretKey : null;
        this.FileNamePrefix = 'FileNamePrefix' in params ? params.FileNamePrefix : null;

    }
}

/**
 * 
 * @class
 */
class EmulateMobileParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * 
         * @type {number || null}
         */
        this.MobileDeviceType = null;

        /**
         * 
         * @type {number || null}
         */
        this.ScreenOrientation = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MobileDeviceType = 'MobileDeviceType' in params ? params.MobileDeviceType : null;
        this.ScreenOrientation = 'ScreenOrientation' in params ? params.ScreenOrientation : null;

    }
}

/**
 * DescribeCallDetailInfo response structure.
 * @class
 */
class DescribeCallDetailInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of records returned.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The user information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<UserInformation> || null}
         */
        this.UserList = null;

        /**
         * The call quality data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<QualityData> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.UserList) {
            this.UserList = new Array();
            for (let z in params.UserList) {
                let obj = new UserInformation();
                obj.deserialize(params.UserList[z]);
                this.UserList.push(obj);
            }
        }

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new QualityData();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTRTCRealTimeQualityData response structure.
 * @class
 */
class DescribeTRTCRealTimeQualityDataResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * TRTC Real- Time Monitoring output parameters
         * @type {TRTCDataResult || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            let obj = new TRTCDataResult();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The cropping parameters for mixed videos.
 * @class
 */
class McuCustomCrop extends  AbstractModel {
    constructor(){
        super();

        /**
         * The horizontal offset (pixels) of the starting point for cropping. This parameter must be greater than 0.
         * @type {number || null}
         */
        this.LocationX = null;

        /**
         * The vertical offset (pixels) of the starting point for cropping. This parameter must be greater than 0.
         * @type {number || null}
         */
        this.LocationY = null;

        /**
         * The video width (pixels) after cropping. The sum of this parameter and `LocationX` cannot be greater than 10000.
         * @type {number || null}
         */
        this.Width = null;

        /**
         * The video height (pixels) after cropping. The sum of this parameter and `LocationY` cannot be greater than 10000.
         * @type {number || null}
         */
        this.Height = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LocationX = 'LocationX' in params ? params.LocationX : null;
        this.LocationY = 'LocationY' in params ? params.LocationY : null;
        this.Width = 'Width' in params ? params.Width : null;
        this.Height = 'Height' in params ? params.Height : null;

    }
}

/**
 * DescribeMixTranscodingUsage request structure.
 * @class
 */
class DescribeMixTranscodingUsageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The start date in the format of YYYY-MM-DD.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * The end date in the format of YYYY-MM-DD.
The period queried per request cannot be longer than 31 days.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * The `SDKAppID` of the TRTC application to which the target room belongs. If you do not specify this parameter, the usage statistics of all TRTC applications under the current account will be returned.
         * @type {number || null}
         */
        this.SdkAppId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;

    }
}

/**
 * DescribeTRTCRealTimeQualityData request structure.
 * @class
 */
class DescribeTRTCRealTimeQualityDataRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User SDKAppId (e.g., 1400xxxxxx)
         * @type {string || null}
         */
        this.SdkAppId = null;

        /**
         * Start time, unix timestamp, Unit: seconds (Query time range depends on the monitoring dashboard function version, standard edition can query the last 3 hours, premium edition can query the last 12 hours)
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time, unix timestamp, Unit: seconds
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Room ID
         * @type {string || null}
         */
        this.RoomId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;

    }
}

/**
 * DescribeStreamIngest response structure.
 * @class
 */
class DescribeStreamIngestResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task status information. InProgress: Indicates that the current task is in progress. NotExist: Indicates that the current task does not exist. Example value: InProgress
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The audio and video parameters for recording.
 * @class
 */
class MixTranscodeParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The video transcoding parameters for recording. If you set this parameter, you must specify all its fields. If you do not set it, the default will be used.
         * @type {VideoParams || null}
         */
        this.VideoParams = null;

        /**
         * The audio transcoding parameters for recording. If you set this parameter, you must specify all its fields. If you do not set it, the default will be used.
         * @type {AudioParams || null}
         */
        this.AudioParams = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.VideoParams) {
            let obj = new VideoParams();
            obj.deserialize(params.VideoParams)
            this.VideoParams = obj;
        }

        if (params.AudioParams) {
            let obj = new AudioParams();
            obj.deserialize(params.AudioParams)
            this.AudioParams = obj;
        }

    }
}

/**
 * StopStreamIngest request structure.
 * @class
 */
class StopStreamIngestRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The SDKAppId of TRTC, which is the same as the SDKAppId corresponding to the task's room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The unique Task ID, which will be returned after the task is successfully started.
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * DescribeTRTCMarketQualityData response structure.
 * @class
 */
class DescribeTRTCMarketQualityDataResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * TRTC Data Dashboard output parameters
         * @type {TRTCDataResult || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            let obj = new TRTCDataResult();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The subscription allowlist/blocklist. You cannot specify an allowlist and a blocklist for audio/video subscription at the same time. The maximum number of streams one can receive at the same time is 25. When streams are mixed, up to 24 videos are supported. You can use `.*$` to specify user IDs with the same prefix, but make sure there aren’t users whose IDs contain ".*$" and are exactly the same as the prefix you pass in. If there are, TRTC will only allow or block those users.
 * @class
 */
class SubscribeStreamUserIds extends  AbstractModel {
    constructor(){
        super();

        /**
         * The allowlist for audio subscription. For example, `["1", "2", "3"]` means to only subscribe to the audios of users 1, 2, and 3, and ["1.*$"] means to only subscribe to the audios of users whose ID prefix is `1`. If this parameter is left empty, the audios of all anchors in the room will be received. The array can contain at most 32 elements.
         * @type {Array.<string> || null}
         */
        this.SubscribeAudioUserIds = null;

        /**
         * The blocklist for audio subscription. For example, `["1", "2", "3"]` means to not subscribe to the audios of users 1, 2, and 3, and `["1.*$"]` means to not subscribe to users whose ID prefix is `1`. If this parameter is left empty, the audios of all anchors in the room will be received. The array can contain at most 32 elements.
         * @type {Array.<string> || null}
         */
        this.UnSubscribeAudioUserIds = null;

        /**
         * The allowlist for video subscription. For example, `["1", "2", "3"]` means to only subscribe to the videos of users 1, 2, and 3, and `["1.*$"]` means to only subscribe to the videos of users whose ID prefix is `1`. If this parameter is left empty, the videos of all anchors in the room will be received. The array can contain at most 32 elements.
         * @type {Array.<string> || null}
         */
        this.SubscribeVideoUserIds = null;

        /**
         * The blocklist for video subscription. For example, `["1", "2", "3"]` means to not subscribe to the videos of users 1, 2, and 3, and `["1.*$"]` means to not subscribe to the videos of users whose ID prefix is `1`. If this parameter is left empty, the videos of all anchors in the room will be received. The array can contain at most 32 elements.
         * @type {Array.<string> || null}
         */
        this.UnSubscribeVideoUserIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubscribeAudioUserIds = 'SubscribeAudioUserIds' in params ? params.SubscribeAudioUserIds : null;
        this.UnSubscribeAudioUserIds = 'UnSubscribeAudioUserIds' in params ? params.UnSubscribeAudioUserIds : null;
        this.SubscribeVideoUserIds = 'SubscribeVideoUserIds' in params ? params.SubscribeVideoUserIds : null;
        this.UnSubscribeVideoUserIds = 'UnSubscribeVideoUserIds' in params ? params.UnSubscribeVideoUserIds : null;

    }
}

/**
 * The information of watermark images.
 * @class
 */
class WaterMarkImage extends  AbstractModel {
    constructor(){
        super();

        /**
         * The download URLs of the watermark images, which must be in JPG or PNG format and cannot be larger than 5 MB.
         * @type {string || null}
         */
        this.WaterMarkUrl = null;

        /**
         * The Y axis of the image's top-left corner. Value range: [0, 2560]. The value cannot be larger than the canvas height.
         * @type {number || null}
         */
        this.Top = null;

        /**
         * The X axis of the image’s top-left corner. Value range: [0, 2560]. The value cannot be larger than the canvas width.
         * @type {number || null}
         */
        this.Left = null;

        /**
         * The relative width of the image. Value range: [0, 2560]. The sum of the values of this parameter and `Left` cannot exceed the canvas width.
         * @type {number || null}
         */
        this.Width = null;

        /**
         * The relative height of the image. Value range: [0, 2560]. The sum of the values of this parameter and `Top` cannot exceed the canvas height.
         * @type {number || null}
         */
        this.Height = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WaterMarkUrl = 'WaterMarkUrl' in params ? params.WaterMarkUrl : null;
        this.Top = 'Top' in params ? params.Top : null;
        this.Left = 'Left' in params ? params.Left : null;
        this.Width = 'Width' in params ? params.Width : null;
        this.Height = 'Height' in params ? params.Height : null;

    }
}

/**
 * The users whose streams are mixed.
 * @class
 */
class McuUserInfoParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The user information.
         * @type {MixUserInfo || null}
         */
        this.UserInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UserInfo) {
            let obj = new MixUserInfo();
            obj.deserialize(params.UserInfo)
            this.UserInfo = obj;
        }

    }
}

/**
 * The stream information.
 * @class
 */
class UserMediaStream extends  AbstractModel {
    constructor(){
        super();

        /**
         * The user information.
         * @type {MixUserInfo || null}
         */
        this.UserInfo = null;

        /**
         * The stream type. 0: Camera; 1: Screen sharing. If you do not pass this parameter, 0 will be used.
         * @type {number || null}
         */
        this.StreamType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UserInfo) {
            let obj = new MixUserInfo();
            obj.deserialize(params.UserInfo)
            this.UserInfo = obj;
        }
        this.StreamType = 'StreamType' in params ? params.StreamType : null;

    }
}

/**
 * A list of SDK or WebRTC events.
 * @class
 */
class EventList extends  AbstractModel {
    constructor(){
        super();

        /**
         * The event information.
         * @type {Array.<EventMessage> || null}
         */
        this.Content = null;

        /**
         * The user ID of the sender.
         * @type {string || null}
         */
        this.PeerId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Content) {
            this.Content = new Array();
            for (let z in params.Content) {
                let obj = new EventMessage();
                obj.deserialize(params.Content[z]);
                this.Content.push(obj);
            }
        }
        this.PeerId = 'PeerId' in params ? params.PeerId : null;

    }
}

/**
 * DescribeTrtcUsage request structure.
 * @class
 */
class DescribeTrtcUsageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The start date in the format of YYYY-MM-DD.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * The end date in the format of YYYY-MM-DD.
The period queried per request cannot be longer than 31 days.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * The `SDKAppID` of the TRTC application to which the target room belongs. If you do not specify this parameter, the usage statistics of all TRTC applications under the current account will be returned.
         * @type {number || null}
         */
        this.SdkAppId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;

    }
}

/**
 * DescribeRoomInfo response structure.
 * @class
 */
class DescribeRoomInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of records returned.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The room information.
         * @type {Array.<RoomState> || null}
         */
        this.RoomList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.RoomList) {
            this.RoomList = new Array();
            for (let z in params.RoomList) {
                let obj = new RoomState();
                obj.deserialize(params.RoomList[z]);
                this.RoomList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DismissRoom request structure.
 * @class
 */
class DismissRoomRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * `SDKAppId` of TRTC.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * Room number.
         * @type {number || null}
         */
        this.RoomId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;

    }
}

/**
 * StartWebRecord request structure.
 * @class
 */
class StartWebRecordRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * URL of the web page to be recorded
         * @type {string || null}
         */
        this.RecordUrl = null;

        /**
         * Maximum recording duration limit, in seconds. Valid range: [1800, 36000]. Default is 36,000 seconds (10 hours).
         * @type {number || null}
         */
        this.MaxDurationLimit = null;

        /**
         * [Required] Parameters related to cloud storage. Currently, Tencent Cloud Object Storage and Tencent Cloud VOD are supported, but third-party cloud storage is not supported. The storage format of the output file only supports hls or mp4.
         * @type {StorageParams || null}
         */
        this.StorageParams = null;

        /**
         * web-page recording video parameters
         * @type {WebRecordVideoParams || null}
         */
        this.WebRecordVideoParams = null;

        /**
         * [Required] The SDKAppID of the TRTC room 
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * When sensitive to repetitive tasks, please pay attention to this value: To avoid tasks being initiated repeatedly in a short period, leading to task duplication, pass in the recording RecordId to identify the current task. The RecordId should be less than 32 bytes. If you carry the RecordId and initiate the start recording request more than once, only one task will be started, and the second one will report the error FailedOperation.TaskExist. Note that if the StartWebRecord call fails with an error other than FailedOperation.TaskExist, please change the RecordId and initiate the request again.
         * @type {string || null}
         */
        this.RecordId = null;

        /**
         * If you want to push the stream to a CDN, you can use the PublishCdnParams.N parameter to set it. It supports pushing streams to up to 10 CDN addresses simultaneously. If the relay address is a Tencent Cloud CDN, please explicitly set IsTencentCdn to 1.
         * @type {Array.<McuPublishCdnParam> || null}
         */
        this.PublishCdnParams = null;

        /**
         * The timeout for loading page resources during recording, in seconds. The default value is 0 seconds. This value must be greater than or equal to 0 seconds and less than or equal to 60 seconds. If page load timeout detection is not enabled for the recording page, please do not set this parameter.
         * @type {number || null}
         */
        this.ReadyTimeout = null;

        /**
         * Render mobile mode parameters; do not set this parameter if you are not going to render mobile mode pages.
         * @type {EmulateMobileParams || null}
         */
        this.EmulateMobileParams = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RecordUrl = 'RecordUrl' in params ? params.RecordUrl : null;
        this.MaxDurationLimit = 'MaxDurationLimit' in params ? params.MaxDurationLimit : null;

        if (params.StorageParams) {
            let obj = new StorageParams();
            obj.deserialize(params.StorageParams)
            this.StorageParams = obj;
        }

        if (params.WebRecordVideoParams) {
            let obj = new WebRecordVideoParams();
            obj.deserialize(params.WebRecordVideoParams)
            this.WebRecordVideoParams = obj;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RecordId = 'RecordId' in params ? params.RecordId : null;

        if (params.PublishCdnParams) {
            this.PublishCdnParams = new Array();
            for (let z in params.PublishCdnParams) {
                let obj = new McuPublishCdnParam();
                obj.deserialize(params.PublishCdnParams[z]);
                this.PublishCdnParams.push(obj);
            }
        }
        this.ReadyTimeout = 'ReadyTimeout' in params ? params.ReadyTimeout : null;

        if (params.EmulateMobileParams) {
            let obj = new EmulateMobileParams();
            obj.deserialize(params.EmulateMobileParams)
            this.EmulateMobileParams = obj;
        }

    }
}

/**
 * StartStreamIngest request structure.
 * @class
 */
class StartStreamIngestRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TRTC's [SdkAppId](https://intl.cloud.tencent.com/document/product/647/46351?from_cn_redirect=1#sdkappid), the same as the SdkAppId corresponding to the Record room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * TRTC's [RoomId](https://intl.cloud.tencent.com/document/product/647/46351?from_cn_redirect=1#roomid), the RoomId corresponding to the Record TRTC room.
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * Type of TRTC RoomId. [*Note] Must be the same as the RoomId type corresponding to the Record room: 0: String type RoomId 1: 32-bit Integer type RoomId (default)
         * @type {number || null}
         */
        this.RoomIdType = null;

        /**
         * UserId of the Pull stream Relay Robot, used to enter the room and initiate the Pull stream Relay Task.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * UserSig corresponding to the Pull stream Relay Robot UserId, i.e., UserId and UserSig are equivalent to the Robot's Login password for entering the room. For the specific Calculation method, please refer to the TRTC [UserSig](https://www.tencentcloud.com/zh/document/product/647/39074) Scheme.
         * @type {string || null}
         */
        this.UserSig = null;

        /**
         * The Url of the media resource.
         * @type {string || null}
         */
        this.StreamUrl = null;

        /**
         * TRTC room permission Encryption ticket, only needed when advanced permission control is enabled in the Console. After enabling advanced permission control in the TRTC Console, TRTC's backend service system will verify a so-called [PrivateMapKey] 'Permission ticket', which contains an encrypted RoomId and an encrypted 'Permission bit list'. Since PrivateMapKey contains RoomId, providing only UserSig without PrivateMapKey does not allow entry into the specified room.
         * @type {string || null}
         */
        this.PrivateMapKey = null;

        /**
         * Video Codec Parameters. Optional, if not filled, Keep original stream Parameters.
         * @type {VideoEncodeParams || null}
         */
        this.VideoEncodeParams = null;

        /**
         * Audio Codec Parameters. Optional, if not filled, Keep original stream Parameters.
         * @type {AudioEncodeParams || null}
         */
        this.AudioEncodeParams = null;

        /**
         * 	
Source URL. Example value: https://a.b/test.mp4
         * @type {Array.<string> || null}
         */
        this.SourceUrl = null;

        /**
         * 
         * @type {number || null}
         */
        this.SeekSecond = null;

        /**
         * Enable auto relay to cdn, please make sure that this feature has been enabled in the console.
         * @type {boolean || null}
         */
        this.AutoPush = null;

        /**
         * Loop playback count, value range: [-1, 1000], default is 1 time. - 0 is an invalid value - -1 is for loop playback, task termination requires actively calling the stop interface or setting MaxDuration.
         * @type {number || null}
         */
        this.RepeatNum = null;

        /**
         * Loop playback maximum duration, only effective when RepeatNum is set to -1, valid value range: [1, 10080], unit: minutes
         * @type {number || null}
         */
        this.MaxDuration = null;

        /**
         * Volume. Valid value range: [0, 100], default value is 100, indicating the original volume.
         * @type {number || null}
         */
        this.Volume = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.RoomIdType = 'RoomIdType' in params ? params.RoomIdType : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserSig = 'UserSig' in params ? params.UserSig : null;
        this.StreamUrl = 'StreamUrl' in params ? params.StreamUrl : null;
        this.PrivateMapKey = 'PrivateMapKey' in params ? params.PrivateMapKey : null;

        if (params.VideoEncodeParams) {
            let obj = new VideoEncodeParams();
            obj.deserialize(params.VideoEncodeParams)
            this.VideoEncodeParams = obj;
        }

        if (params.AudioEncodeParams) {
            let obj = new AudioEncodeParams();
            obj.deserialize(params.AudioEncodeParams)
            this.AudioEncodeParams = obj;
        }
        this.SourceUrl = 'SourceUrl' in params ? params.SourceUrl : null;
        this.SeekSecond = 'SeekSecond' in params ? params.SeekSecond : null;
        this.AutoPush = 'AutoPush' in params ? params.AutoPush : null;
        this.RepeatNum = 'RepeatNum' in params ? params.RepeatNum : null;
        this.MaxDuration = 'MaxDuration' in params ? params.MaxDuration : null;
        this.Volume = 'Volume' in params ? params.Volume : null;

    }
}

/**
 * DescribeAITranscription request structure.
 * @class
 */
class DescribeAITranscriptionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query the task status. If not in use, pass in an empty string. There are two query methods: 1. Fill in only TaskId. This method uses TaskId to query tasks. 2. TaskId is an empty string. Fill in SdkAppId and SessionId. This method does not require TaskId to query tasks.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * TRTC's SdkAppId is used together with SessionId.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The SessionId passed in when starting the transcription task is used together with the SdkAppId.
         * @type {string || null}
         */
        this.SessionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.SessionId = 'SessionId' in params ? params.SessionId : null;

    }
}

/**
 * DescribeAIConversation response structure.
 * @class
 */
class DescribeAIConversationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The time when the task starts.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Task status. There are 4 values: 1. Idle means the task has not started 2. Preparing means the task is being prepared 3. InProgress means the task is running 4. Stopped means the task has stopped and resources are being cleaned up
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The unique ID of the task, generated when the task is started
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The SessionId filled in when opening the conversation task.
         * @type {string || null}
         */
        this.SessionId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.SessionId = 'SessionId' in params ? params.SessionId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserInfo response structure.
 * @class
 */
class DescribeUserInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of records returned.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The user information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<UserInformation> || null}
         */
        this.UserList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.UserList) {
            this.UserList = new Array();
            for (let z in params.UserList) {
                let obj = new UserInformation();
                obj.deserialize(params.UserList[z]);
                this.UserList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RemoveUserByStrRoomId response structure.
 * @class
 */
class RemoveUserByStrRoomIdResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateStreamIngest response structure.
 * @class
 */
class UpdateStreamIngestResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task status information. InProgress: Indicates that the current task is in progress. NotExist: Indicates that the current task does not exist. Example value: InProgress
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information about Tencent COS and third-party cloud storage accounts.
 * @class
 */
class CloudModerationStorage extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information about Tencent COS and third-party cloud storage accounts.
0: Tencent COS.
1: AWS S3.
2: Alibaba Cloud OSS.
Example value: 0.
         * @type {number || null}
         */
        this.Vendor = null;

        /**
         * [Region information](https://www.tencentcloud.comom/document/product/436/6224?from_cn_redirect=1#.E5.9C.B0.E5.9F.9F) of Tencent COS.
Example value: cn-shanghai-1.

[Region information](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-regions) of AWS S3.
Example value: ap-southeast-3.	
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Cloud bucket name.
         * @type {string || null}
         */
        this.Bucket = null;

        /**
         * access_key account information of the cloud storage.
To store files to Tencent COS, visit https://console.cloud.tencent.com/cam/capi to view or create the SecretId value corresponding to the key fields in the link.
Example value: test-accesskey.
         * @type {string || null}
         */
        this.AccessKey = null;

        /**
         * secret_key account information of cloud storage.
To store files to Tencent COS, visit https://console.cloud.tencent.com/cam/capi to view or create the SecretKey value corresponding to the key fields in the link.
Example value: test-secretkey.
         * @type {string || null}
         */
        this.SecretKey = null;

        /**
         * Specified location of the cloud bucket, which consists of arrays of strings. Value range for the strings is lowercase letters (a–z), uppercase letters (A–Z), digits (0–9), and special characters (_-). For example, under the feature of ["prefix1", "prefix2"], the audio slicing file (xxx.mp3) is stored as prefix1/prefix2/{taskId}/{userId}/audios/{sdkappid}_{roomId}_{userid}_{UTC time}.ogg, while the video frame is stored as prefix1/prefix2/{taskId}/{userId}/images/{sdkappid}_{roomId}_{userid}_{UTC time}.png.
         * @type {Array.<string> || null}
         */
        this.FileNamePrefix = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Vendor = 'Vendor' in params ? params.Vendor : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Bucket = 'Bucket' in params ? params.Bucket : null;
        this.AccessKey = 'AccessKey' in params ? params.AccessKey : null;
        this.SecretKey = 'SecretKey' in params ? params.SecretKey : null;
        this.FileNamePrefix = 'FileNamePrefix' in params ? params.FileNamePrefix : null;

    }
}

/**
 * The information of the watermark image.
 * @class
 */
class McuWaterMarkImage extends  AbstractModel {
    constructor(){
        super();

        /**
         * The URL of the watermark image, which must be in PNG, JPG, or JPEG format and cannot exceed 5 MB.
         * @type {string || null}
         */
        this.WaterMarkUrl = null;

        /**
         * The watermark width (pixels).
         * @type {number || null}
         */
        this.WaterMarkWidth = null;

        /**
         * The watermark height (pixels).
         * @type {number || null}
         */
        this.WaterMarkHeight = null;

        /**
         * The horizontal offset (pixels) of the watermark.
         * @type {number || null}
         */
        this.LocationX = null;

        /**
         * The vertical offset (pixels) of the watermark.
         * @type {number || null}
         */
        this.LocationY = null;

        /**
         * The image layer of the watermark. If you do not pass this parameter, 0 will be used.
         * @type {number || null}
         */
        this.ZOrder = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WaterMarkUrl = 'WaterMarkUrl' in params ? params.WaterMarkUrl : null;
        this.WaterMarkWidth = 'WaterMarkWidth' in params ? params.WaterMarkWidth : null;
        this.WaterMarkHeight = 'WaterMarkHeight' in params ? params.WaterMarkHeight : null;
        this.LocationX = 'LocationX' in params ? params.LocationX : null;
        this.LocationY = 'LocationY' in params ? params.LocationY : null;
        this.ZOrder = 'ZOrder' in params ? params.ZOrder : null;

    }
}

/**
 * StartPublishCdnStream response structure.
 * @class
 */
class StartPublishCdnStreamResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The task ID, which is generated by the Tencent Cloud server. You need to pass in the task ID when making a request to update or stop a relaying task.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The TRTC audio/video duration generated in a certain time period.
 * @class
 */
class TrtcUsage extends  AbstractModel {
    constructor(){
        super();

        /**
         * The time point in the format of `YYYY-MM-DD HH:mm:ss`. If more than one day is queried, `HH:mm:ss` is `00:00:00`.
         * @type {string || null}
         */
        this.TimeKey = null;

        /**
         * The usage (minutes). Each element of this parameter corresponds to an element of `UsageKey` in the order they are listed.
         * @type {Array.<number> || null}
         */
        this.UsageValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TimeKey = 'TimeKey' in params ? params.TimeKey : null;
        this.UsageValue = 'UsageValue' in params ? params.UsageValue : null;

    }
}

/**
 * DeleteCloudSliceTask response structure.
 * @class
 */
class DeleteCloudSliceTaskResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the slicing task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRelayUsage response structure.
 * @class
 */
class DescribeRelayUsageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The usage type. Each element of this parameter corresponds to an element of `UsageValue` in the order they are listed.
         * @type {Array.<string> || null}
         */
        this.UsageKey = null;

        /**
         * The usage data in each time unit.
         * @type {Array.<TrtcUsage> || null}
         */
        this.UsageList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UsageKey = 'UsageKey' in params ? params.UsageKey : null;

        if (params.UsageList) {
            this.UsageList = new Array();
            for (let z in params.UsageList) {
                let obj = new TrtcUsage();
                obj.deserialize(params.UsageList[z]);
                this.UsageList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The layout parameters.
 * @class
 */
class McuLayout extends  AbstractModel {
    constructor(){
        super();

        /**
         * The information of the stream that is displayed. If you do not pass this parameter, TRTC will display the videos of anchors in the room according to their room entry sequence.
         * @type {UserMediaStream || null}
         */
        this.UserMediaStream = null;

        /**
         * The video width (pixels). If you do not pass this parameter, 0 will be used.
         * @type {number || null}
         */
        this.ImageWidth = null;

        /**
         * The video height (pixels). If you do not pass this parameter, 0 will be used.
         * @type {number || null}
         */
        this.ImageHeight = null;

        /**
         * The horizontal offset (pixels) of the video. The sum of `LocationX` and `ImageWidth` cannot exceed the width of the canvas. If you do not pass this parameter, 0 will be used.
         * @type {number || null}
         */
        this.LocationX = null;

        /**
         * The vertical offset of the video. The sum of `LocationY` and `ImageHeight` cannot exceed the height of the canvas. If you do not pass this parameter, 0 will be used.
         * @type {number || null}
         */
        this.LocationY = null;

        /**
         * The image layer of the video. If you do not pass this parameter, 0 will be used.
         * @type {number || null}
         */
        this.ZOrder = null;

        /**
         * The rendering mode of the video. 0 (the video is scaled and the excess parts are cropped), 1 (the video is scaled), 2 (the video is scaled and the blank spaces are filled with black bars). If you do not pass this parameter, 0 will be used.
         * @type {number || null}
         */
        this.RenderMode = null;

        /**
         * (Not supported yet) The background color of a video. Below are the values for some commonly used colors:
Red: `0xcc0033`
Yellow: `0xcc9900`
Green: `0xcccc33`
Blue: `0x99CCFF`
Black: `0x000000`
White: `0xFFFFFF`
Grey: `0x999999`
         * @type {string || null}
         */
        this.BackGroundColor = null;

        /**
         * The URL of the background image for the video. This parameter allows you to specify an image to display when the user’s camera is turned off or before the user enters the room. If the dimensions of the image specified are different from those of the video window, the image will be stretched to fit the space. This parameter has a higher priority than `BackGroundColor`.
         * @type {string || null}
         */
        this.BackgroundImageUrl = null;

        /**
         * Custom cropping.
         * @type {McuCustomCrop || null}
         */
        this.CustomCrop = null;

        /**
         * The display mode of the sub-background image during output: 0 for cropping, 1 for scaling and displaying the background, 2 for scaling and displaying the black background, 3 for proportional scaling. If not filled in, the default is 3.
         * @type {number || null}
         */
        this.BackgroundRenderMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UserMediaStream) {
            let obj = new UserMediaStream();
            obj.deserialize(params.UserMediaStream)
            this.UserMediaStream = obj;
        }
        this.ImageWidth = 'ImageWidth' in params ? params.ImageWidth : null;
        this.ImageHeight = 'ImageHeight' in params ? params.ImageHeight : null;
        this.LocationX = 'LocationX' in params ? params.LocationX : null;
        this.LocationY = 'LocationY' in params ? params.LocationY : null;
        this.ZOrder = 'ZOrder' in params ? params.ZOrder : null;
        this.RenderMode = 'RenderMode' in params ? params.RenderMode : null;
        this.BackGroundColor = 'BackGroundColor' in params ? params.BackGroundColor : null;
        this.BackgroundImageUrl = 'BackgroundImageUrl' in params ? params.BackgroundImageUrl : null;

        if (params.CustomCrop) {
            let obj = new McuCustomCrop();
            obj.deserialize(params.CustomCrop)
            this.CustomCrop = obj;
        }
        this.BackgroundRenderMode = 'BackgroundRenderMode' in params ? params.BackgroundRenderMode : null;

    }
}

/**
 * Control parameters for cloud slicing.
 * @class
 */
class SliceParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Slicing task type.
1: audio slicing;
2: video frame extraction;
3: audio/video slicing + video frame extraction.
Example value: 1.
         * @type {number || null}
         */
        this.SliceType = null;

        /**
         * Recording is stopped automatically when there is no anchor in the room for more than MaxIdleTime. Unit: seconds. Default value: 30 seconds. This value needs to be greater than or equal to 5 seconds and less than or equal to 86,400 seconds (24 hours).
Example value: 30.
         * @type {number || null}
         */
        this.MaxIdleTime = null;

        /**
         * Audio slicing duration. Default value: 15s. Example value: 15.
         * @type {number || null}
         */
        this.SliceAudio = null;

        /**
         * Interval for video frame extraction. Default value: 5s. Example value: 5.
         * @type {number || null}
         */
        this.SliceVideo = null;

        /**
         * Specifies the allowlist or blocklist for the subscription stream.
         * @type {SubscribeStreamUserIds || null}
         */
        this.SubscribeStreamUserIds = null;

        /**
         * Depreciated. The callback URL is configured in the console.
         * @type {string || null}
         */
        this.SliceCallbackUrl = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SliceType = 'SliceType' in params ? params.SliceType : null;
        this.MaxIdleTime = 'MaxIdleTime' in params ? params.MaxIdleTime : null;
        this.SliceAudio = 'SliceAudio' in params ? params.SliceAudio : null;
        this.SliceVideo = 'SliceVideo' in params ? params.SliceVideo : null;

        if (params.SubscribeStreamUserIds) {
            let obj = new SubscribeStreamUserIds();
            obj.deserialize(params.SubscribeStreamUserIds)
            this.SubscribeStreamUserIds = obj;
        }
        this.SliceCallbackUrl = 'SliceCallbackUrl' in params ? params.SliceCallbackUrl : null;

    }
}

/**
 * Parameters required for submitting content to the third-party moderation supplier.
 * @class
 */
class ModerationSupplierParam extends  AbstractModel {
    constructor(){
        super();

        /**
         * Moderation supplier account ID. For Tencent Tianyu, the value is not null; for NETEASE Yidun, the value is null.
         * @type {string || null}
         */
        this.AppID = null;

        /**
         * Moderation supplier key ID.
         * @type {string || null}
         */
        this.SecretId = null;

        /**
         * Moderation supplier key.
         * @type {string || null}
         */
        this.SecretKey = null;

        /**
         * Audio scenario. Policy ID or businessId.
         * @type {string || null}
         */
        this.AudioBizType = null;

        /**
         * Image scenario. Policy ID or businessId.
         * @type {string || null}
         */
        this.ImageBizType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AppID = 'AppID' in params ? params.AppID : null;
        this.SecretId = 'SecretId' in params ? params.SecretId : null;
        this.SecretKey = 'SecretKey' in params ? params.SecretKey : null;
        this.AudioBizType = 'AudioBizType' in params ? params.AudioBizType : null;
        this.ImageBizType = 'ImageBizType' in params ? params.ImageBizType : null;

    }
}

/**
 * DescribeRecordingUsage request structure.
 * @class
 */
class DescribeRecordingUsageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The start date in the format of YYYY-MM-DD.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * The end date in the format of YYYY-MM-DD.
The period queried per request cannot be longer than 31 days.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Whether to query single-stream or mixed-stream recording. Valid values: `single`, `multi`.
         * @type {string || null}
         */
        this.MixType = null;

        /**
         * The `SDKAppID` of the TRTC application to which the target room belongs. If you do not specify this parameter, the usage statistics of all TRTC applications under the current account will be returned.
         * @type {number || null}
         */
        this.SdkAppId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.MixType = 'MixType' in params ? params.MixType : null;
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;

    }
}

/**
 * The information of the recording files, which is returned by the `DescribeCloudRecording` API.
 * @class
 */
class StorageFile extends  AbstractModel {
    constructor(){
        super();

        /**
         * The user whose stream is recorded into the file. In the mixed-stream recording mode, this parameter will be empty.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * The filename.
         * @type {string || null}
         */
        this.FileName = null;

        /**
         * The type of the media recorded.
video
audio
audio_video
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TrackType = null;

        /**
         * The start time (Unix timestamp) of the recording file.
         * @type {number || null}
         */
        this.BeginTimeStamp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.FileName = 'FileName' in params ? params.FileName : null;
        this.TrackType = 'TrackType' in params ? params.TrackType : null;
        this.BeginTimeStamp = 'BeginTimeStamp' in params ? params.BeginTimeStamp : null;

    }
}

/**
 * The watermark layout.
 * @class
 */
class WaterMark extends  AbstractModel {
    constructor(){
        super();

        /**
         * The watermark type. 0 (default): image; 1: text (not supported yet).
         * @type {number || null}
         */
        this.WaterMarkType = null;

        /**
         * The information of watermark images. This parameter is required if the watermark type is image.
         * @type {WaterMarkImage || null}
         */
        this.WaterMarkImage = null;

        /**
         * The information of the text watermark. This parameter is required if `WaterMarkType` is `1`.
         * @type {WaterMarkChar || null}
         */
        this.WaterMarkChar = null;

        /**
         * The information of the timestamp watermark. This parameter is required if `WaterMarkType` is `2`.
         * @type {WaterMarkTimestamp || null}
         */
        this.WaterMarkTimestamp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WaterMarkType = 'WaterMarkType' in params ? params.WaterMarkType : null;

        if (params.WaterMarkImage) {
            let obj = new WaterMarkImage();
            obj.deserialize(params.WaterMarkImage)
            this.WaterMarkImage = obj;
        }

        if (params.WaterMarkChar) {
            let obj = new WaterMarkChar();
            obj.deserialize(params.WaterMarkChar)
            this.WaterMarkChar = obj;
        }

        if (params.WaterMarkTimestamp) {
            let obj = new WaterMarkTimestamp();
            obj.deserialize(params.WaterMarkTimestamp)
            this.WaterMarkTimestamp = obj;
        }

    }
}

/**
 * 
 * @class
 */
class McuStorageParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Third-Party Cloud Storage Account Information
(Note: Storing files in Object Storage COS will incur recording file delivery fees. For details, see [Cloud Recording Billing]. Storing in VOD does not incur this fee.)
Example:{"Vendor":0,"Region":"ap-shanghai","Bucket":"*","AccessKey":"*","SecretKey":"***","FileNamePrefix":["mcu_record"]}
         * @type {CloudStorage || null}
         */
        this.CloudStorage = null;

        /**
         * Tencent Cloud VOD Account Information
Example:{"McuTencentVod":{"ExpireTime":86400}}
         * @type {McuCloudVod || null}
         */
        this.McuCloudVod = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CloudStorage) {
            let obj = new CloudStorage();
            obj.deserialize(params.CloudStorage)
            this.CloudStorage = obj;
        }

        if (params.McuCloudVod) {
            let obj = new McuCloudVod();
            obj.deserialize(params.McuCloudVod)
            this.McuCloudVod = obj;
        }

    }
}

/**
 * DeleteCloudSliceTask request structure.
 * @class
 */
class DeleteCloudSliceTaskRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * SDKAppId of TRTC, which is the same as the SDKAppId corresponding to the TRTC room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * Unique ID of the slicing task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * The layout parameters for mixed-stream recording.
 * @class
 */
class MixLayoutParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Layout mode:
1: Floating
2: Screen sharing
3: Grid (default)
4: Custom

Floating: By default, the video of the first anchor (you can also specify an anchor) who enters the room is scaled to fill the screen. When other anchors enter the room, their videos appear smaller and are superimposed over the large video from left to right starting from the bottom of the canvas according to their room entry sequence. If the total number of videos is 17 or less, there will be four windows in each row (4 x 4); if it is greater than 17, there will be five windows in each row (5 x 5). Up to 25 videos can be displayed. A user who publishes only audio will still be displayed in one window.

Screen sharing: The video of a specified anchor occupies a larger part of the canvas on the left side (if you do not specify an anchor, the left window will display the canvas background). The videos of other anchors are smaller and are positioned on the right side. If the total number of videos is 17 or less, the small videos are positioned from top to bottom in up to two columns on the right side, with eight videos per column at most. If there are more than 17 videos, the additional videos are positioned at the bottom of the canvas from left to right. Up to 25 videos can be displayed. A user who publishes only audio will still be displayed in one window.

Grid: The videos of anchors are scaled and positioned automatically according to the total number of anchors in a room. Each video has the same size. Up to 25 videos can be displayed.

Custom: Specify the layout of videos by using the `MixLayoutList` parameter.
         * @type {number || null}
         */
        this.MixLayoutMode = null;

        /**
         * The custom layout details. This parameter is valid if `MixLayoutMode` is set to `4`. Up to 25 videos can be displayed.
         * @type {Array.<MixLayout> || null}
         */
        this.MixLayoutList = null;

        /**
         * The background color, which is a hexadecimal value (starting with "#", followed by the color value) converted from an 8-bit RGB value. For example, the RGB value of orange is `R:255 G:165 B:0`, and its hexadecimal value is `#FFA500`. The default color is black.
         * @type {string || null}
         */
        this.BackGroundColor = null;

        /**
         * The user whose video is displayed in the big window. This parameter is valid if `MixLayoutMode` is set to `1` (floating) or `2` (screen sharing). If it is left empty, the first anchor entering the room is displayed in the big window in the floating mode and the canvas background is displayed in the screen sharing mode.
         * @type {string || null}
         */
        this.MaxResolutionUserId = null;

        /**
         * The stream type.
0: Primary stream (default)
1: Substream (screen sharing stream)
This parameter specifies the type of the stream displayed in the big window. If it appears in `MixLayoutList`, it indicates the type of the stream of a specified user.
         * @type {number || null}
         */
        this.MediaId = null;

        /**
         * The URL of the background image, which cannot contain Chinese characters. The image must be in JPG or PNG format and cannot be larger than 5 MB.
         * @type {string || null}
         */
        this.BackgroundImageUrl = null;

        /**
         * `1` means to use placeholders, and `0` (default) means to not use placeholders. If this parameter is set to `1`, when a user is not publishing video, a placeholder image will be displayed in the window reserved for the user.
         * @type {number || null}
         */
        this.PlaceHolderMode = null;

        /**
         * The render mode to use when the aspect ratio of a video is different from that of the window. This parameter is defined the same as `RenderMode` in `MixLayoufList`.
         * @type {number || null}
         */
        this.BackgroundImageRenderMode = null;

        /**
         * The URL of the background image for a window. The image must be in JPG or PNG format and cannot be larger than 5 MB. If the image’s aspect ratio is different from that of the window, the image will be rendered according to the value of `RenderMode`.
         * @type {string || null}
         */
        this.DefaultSubBackgroundImage = null;

        /**
         * The watermark layout. Up to 25 watermarks are supported.
         * @type {Array.<WaterMark> || null}
         */
        this.WaterMarkList = null;

        /**
         * The render mode to use when the aspect ratio of a video is different from that of the window. This parameter is invalid if a custom layout is used. It is defined the same as `RenderMode` in `MixLayoufList`.
         * @type {number || null}
         */
        this.RenderMode = null;

        /**
         * This parameter is valid only if the screen sharing layout is used. If you set it to `1`, the large video window will appear on the right and the small window on the left. The default value is `0`.
         * @type {number || null}
         */
        this.MaxResolutionUserAlign = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MixLayoutMode = 'MixLayoutMode' in params ? params.MixLayoutMode : null;

        if (params.MixLayoutList) {
            this.MixLayoutList = new Array();
            for (let z in params.MixLayoutList) {
                let obj = new MixLayout();
                obj.deserialize(params.MixLayoutList[z]);
                this.MixLayoutList.push(obj);
            }
        }
        this.BackGroundColor = 'BackGroundColor' in params ? params.BackGroundColor : null;
        this.MaxResolutionUserId = 'MaxResolutionUserId' in params ? params.MaxResolutionUserId : null;
        this.MediaId = 'MediaId' in params ? params.MediaId : null;
        this.BackgroundImageUrl = 'BackgroundImageUrl' in params ? params.BackgroundImageUrl : null;
        this.PlaceHolderMode = 'PlaceHolderMode' in params ? params.PlaceHolderMode : null;
        this.BackgroundImageRenderMode = 'BackgroundImageRenderMode' in params ? params.BackgroundImageRenderMode : null;
        this.DefaultSubBackgroundImage = 'DefaultSubBackgroundImage' in params ? params.DefaultSubBackgroundImage : null;

        if (params.WaterMarkList) {
            this.WaterMarkList = new Array();
            for (let z in params.WaterMarkList) {
                let obj = new WaterMark();
                obj.deserialize(params.WaterMarkList[z]);
                this.WaterMarkList.push(obj);
            }
        }
        this.RenderMode = 'RenderMode' in params ? params.RenderMode : null;
        this.MaxResolutionUserAlign = 'MaxResolutionUserAlign' in params ? params.MaxResolutionUserAlign : null;

    }
}

/**
 * ModifyCloudSliceTask request structure.
 * @class
 */
class ModifyCloudSliceTaskRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * SDKAppId of TRTC, which is the same as the SDKAppId corresponding to the TRTC room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * Unique ID of the slicing task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Specifies the allowlist or blocklist for the subscription stream.
         * @type {SubscribeStreamUserIds || null}
         */
        this.SubscribeStreamUserIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

        if (params.SubscribeStreamUserIds) {
            let obj = new SubscribeStreamUserIds();
            obj.deserialize(params.SubscribeStreamUserIds)
            this.SubscribeStreamUserIds = obj;
        }

    }
}

/**
 * DescribeMixTranscodingUsage response structure.
 * @class
 */
class DescribeMixTranscodingUsageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The usage type. Each element of this parameter corresponds to an element of `UsageValue` in the order they are listed.
         * @type {Array.<string> || null}
         */
        this.UsageKey = null;

        /**
         * The usage data in each time unit.
         * @type {Array.<TrtcUsage> || null}
         */
        this.UsageList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UsageKey = 'UsageKey' in params ? params.UsageKey : null;

        if (params.UsageList) {
            this.UsageList = new Array();
            for (let z in params.UsageList) {
                let obj = new TrtcUsage();
                obj.deserialize(params.UsageList[z]);
                this.UsageList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Parameters for relaying to a TRTC room.
 * @class
 */
class McuFeedBackRoomParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The room ID.
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * The ID type of the room to which streams are relayed. `0` indicates integer, and `1` indicates string.
         * @type {number || null}
         */
        this.RoomIdType = null;

        /**
         * The [user ID](https://www.tencentcloud.com/document/product/647/37714) of the relaying robot in the TRTC room, which cannot be the same as a user ID already in use. We recommend you include the room ID in this user ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * The signature (similar to login password) required for the relaying robot to enter the room. For information on how to calculate the signature, see [What is UserSig?](https://www.tencentcloud.com/document/product/647/38104).
         * @type {string || null}
         */
        this.UserSig = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.RoomIdType = 'RoomIdType' in params ? params.RoomIdType : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserSig = 'UserSig' in params ? params.UserSig : null;

    }
}

/**
 * The audio encoding parameters.
 * @class
 */
class AudioEncode extends  AbstractModel {
    constructor(){
        super();

        /**
         * The audio sample rate (Hz). Valid values: 48000, 44100, 32000, 24000, 16000, 8000.
         * @type {number || null}
         */
        this.SampleRate = null;

        /**
         * The number of sound channels. Valid values: 1 (mono), 2 (dual).
         * @type {number || null}
         */
        this.Channel = null;

        /**
         * The audio bitrate (Kbps). Value range: 8-500.
         * @type {number || null}
         */
        this.BitRate = null;

        /**
         * The audio codec. Valid values: 0 (LC-AAC), 1 (HE-AAC), 2 (HE-AACv2). The default value is 0. If this parameter is set to 2, `Channel` must be 2. If it is set to 1 or 2, `SampleRate` can only be 48000, 44100, 32000, 24000, or 16000.
         * @type {number || null}
         */
        this.Codec = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SampleRate = 'SampleRate' in params ? params.SampleRate : null;
        this.Channel = 'Channel' in params ? params.Channel : null;
        this.BitRate = 'BitRate' in params ? params.BitRate : null;
        this.Codec = 'Codec' in params ? params.Codec : null;

    }
}

/**
 * RemoveUser request structure.
 * @class
 */
class RemoveUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * `SDKAppId` of TRTC.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * Room number.
         * @type {number || null}
         */
        this.RoomId = null;

        /**
         * List of up to 10 users to be removed.
         * @type {Array.<string> || null}
         */
        this.UserIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.UserIds = 'UserIds' in params ? params.UserIds : null;

    }
}

/**
 * The layout parameters.
 * @class
 */
class McuLayoutParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The layout mode. Valid values: 1 (floating), 2 (screen sharing), 3 (grid), 4 (custom). Floating, screen sharing, and grid are dynamic layouts. Custom layouts are static layouts.
         * @type {number || null}
         */
        this.MixLayoutMode = null;

        /**
         * Whether to display users who publish only audio. 0: No; 1: Yes. This parameter is valid only if a dynamic layout is used. If you do not pass this parameter, 0 will be used.
         * @type {number || null}
         */
        this.PureAudioHoldPlaceMode = null;

        /**
         * The details of a custom layout.
         * @type {Array.<McuLayout> || null}
         */
        this.MixLayoutList = null;

        /**
         * The information of the large video in screen sharing or floating layout mode.
         * @type {MaxVideoUser || null}
         */
        this.MaxVideoUser = null;

        /**
         * The image fill mode. This parameter is valid if the layout mode is screen sharing, floating, or grid. `0`: The image will be cropped. `1`: The image will be scaled. `2`: The image will be scaled and there may be black bars.
         * @type {number || null}
         */
        this.RenderMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MixLayoutMode = 'MixLayoutMode' in params ? params.MixLayoutMode : null;
        this.PureAudioHoldPlaceMode = 'PureAudioHoldPlaceMode' in params ? params.PureAudioHoldPlaceMode : null;

        if (params.MixLayoutList) {
            this.MixLayoutList = new Array();
            for (let z in params.MixLayoutList) {
                let obj = new McuLayout();
                obj.deserialize(params.MixLayoutList[z]);
                this.MixLayoutList.push(obj);
            }
        }

        if (params.MaxVideoUser) {
            let obj = new MaxVideoUser();
            obj.deserialize(params.MaxVideoUser)
            this.MaxVideoUser = obj;
        }
        this.RenderMode = 'RenderMode' in params ? params.RenderMode : null;

    }
}

/**
 * DescribeUnusualEvent request structure.
 * @class
 */
class DescribeUnusualEventRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The application ID, such as `1400xxxxxx`.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The start time, which is a Unix timestamp (seconds) in local time, such as `1590065777`.
Note: Only data in the last 14 days can be queried.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * The end time, which is a Unix timestamp (seconds) in local time, such as `1590065877`. The end time and start time cannot be more than one hour apart.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * The room ID. Up to 20 random abnormal user experiences of the specified room will be returned.
         * @type {string || null}
         */
        this.RoomId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;

    }
}

/**
 * DescribeCloudRecording request structure.
 * @class
 */
class DescribeCloudRecordingRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `SDKAppID` of the room whose streams are recorded.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The unique ID of the recording task, which is returned after recording starts successfully.
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * The Tencent Cloud VOD parameters.
 * @class
 */
class TencentVod extends  AbstractModel {
    constructor(){
        super();

        /**
         * The operation to perform on the media uploaded. The value of this parameter is the name of a task flow template. You can create a custom task flow template in Tencent Cloud VOD.
         * @type {string || null}
         */
        this.Procedure = null;

        /**
         * The expiration time of the media file, which is a time period (seconds) from the current time. For example, `86400` means to save the media file for one day. To save the file permanently, set this parameter to `0`.
         * @type {number || null}
         */
        this.ExpireTime = null;

        /**
         * The storage region. Set this parameter if you have special requirements on the storage region.
         * @type {string || null}
         */
        this.StorageRegion = null;

        /**
         * The category ID, which is returned after you create a category by calling an API. You can use categories to manage media files.
The default value is `0`, which means others.
         * @type {number || null}
         */
        this.ClassId = null;

        /**
         * The VOD subapplication ID. If you need to access a resource in a subapplication, set this parameter to the subapplication ID; otherwise, leave it empty.
         * @type {number || null}
         */
        this.SubAppId = null;

        /**
         * The task flow context, which is passed through after the task is completed.
         * @type {string || null}
         */
        this.SessionContext = null;

        /**
         * The upload context, which is passed through after upload is completed.
         * @type {string || null}
         */
        this.SourceContext = null;

        /**
         * The format of recording files uploaded to VOD. `0` (default): MP4; `1`: HLS; `2`: AAC (valid only if `StreamType` is `1`); `3`: HLS+MP4; `4`: HLS+AAC.
         * @type {number || null}
         */
        this.MediaType = null;

        /**
         * The custom prefix of recording files. This parameter is valid only if recording files are uploaded to VOD. It can contain letters, numbers, underscores, and hyphens and cannot exceed 64 bytes. This prefix and the automatically generated filename are connected with `__UserId_u_`.
         * @type {string || null}
         */
        this.UserDefineRecordId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Procedure = 'Procedure' in params ? params.Procedure : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.StorageRegion = 'StorageRegion' in params ? params.StorageRegion : null;
        this.ClassId = 'ClassId' in params ? params.ClassId : null;
        this.SubAppId = 'SubAppId' in params ? params.SubAppId : null;
        this.SessionContext = 'SessionContext' in params ? params.SessionContext : null;
        this.SourceContext = 'SourceContext' in params ? params.SourceContext : null;
        this.MediaType = 'MediaType' in params ? params.MediaType : null;
        this.UserDefineRecordId = 'UserDefineRecordId' in params ? params.UserDefineRecordId : null;

    }
}

/**
 * The custom pass-through SEI.
 * @class
 */
class McuPassThrough extends  AbstractModel {
    constructor(){
        super();

        /**
         * The payload of the pass-through SEI.
         * @type {string || null}
         */
        this.PayloadContent = null;

        /**
         * The payload type of the SEI message. Value range: 5 and 100-254 (244 is used internally by Tencent Cloud for timestamps).
         * @type {number || null}
         */
        this.PayloadType = null;

        /**
         * This parameter is required only if `PayloadType` is 5. It must be a 32-character hexadecimal string. If `PayloadType` is not 5, this parameter will be ignored.
         * @type {string || null}
         */
        this.PayloadUuid = null;

        /**
         * The SEI sending interval (milliseconds). The default value is 1000.
         * @type {number || null}
         */
        this.Interval = null;

        /**
         * Valid values: `1`: SEI is guaranteed when keyframes are sent; `0` (default): SEI is not guaranteed when keyframes are sent.
         * @type {number || null}
         */
        this.FollowIdr = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PayloadContent = 'PayloadContent' in params ? params.PayloadContent : null;
        this.PayloadType = 'PayloadType' in params ? params.PayloadType : null;
        this.PayloadUuid = 'PayloadUuid' in params ? params.PayloadUuid : null;
        this.Interval = 'Interval' in params ? params.Interval : null;
        this.FollowIdr = 'FollowIdr' in params ? params.FollowIdr : null;

    }
}

/**
 * StartWebRecord response structure.
 * @class
 */
class StartWebRecordResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the recording task
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SetUserBlockedByStrRoomId response structure.
 * @class
 */
class SetUserBlockedByStrRoomIdResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * TRTC Data Dashboard/Real-Time Monitoring API output parameters
 * @class
 */
class TRTCDataResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * StatementID value, fixed at 0 for Monitoring Dashboard.
         * @type {number || null}
         */
        this.StatementID = null;

        /**
         * Query result data, returned in Columns-Values format.
         * @type {Array.<SeriesInfos> || null}
         */
        this.Series = null;

        /**
         * Total value, fixed at 1 for Monitoring Dashboard.
         * @type {number || null}
         */
        this.Total = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StatementID = 'StatementID' in params ? params.StatementID : null;

        if (params.Series) {
            this.Series = new Array();
            for (let z in params.Series) {
                let obj = new SeriesInfos();
                obj.deserialize(params.Series[z]);
                this.Series.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;

    }
}

/**
 * DescribeCloudRecording response structure.
 * @class
 */
class DescribeCloudRecordingResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique ID of the recording task.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The status of the on-cloud recording task.
Idle: The task is idle.
InProgress: The task is in progress.
Exited: The task is being ended.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The information of the recording files.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<StorageFile> || null}
         */
        this.StorageFileList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.Status = 'Status' in params ? params.Status : null;

        if (params.StorageFileList) {
            this.StorageFileList = new Array();
            for (let z in params.StorageFileList) {
                let obj = new StorageFile();
                obj.deserialize(params.StorageFileList[z]);
                this.StorageFileList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyCloudModeration request structure.
 * @class
 */
class ModifyCloudModerationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * SDKAppId of TRTC, which is the same as the SDKAppId corresponding to the TRTC room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * Unique ID of the moderation task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Specifies the allowlist or blocklist for the subscription stream.
         * @type {SubscribeStreamUserIds || null}
         */
        this.SubscribeStreamUserIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

        if (params.SubscribeStreamUserIds) {
            let obj = new SubscribeStreamUserIds();
            obj.deserialize(params.SubscribeStreamUserIds)
            this.SubscribeStreamUserIds = obj;
        }

    }
}

/**
 * CreateCloudRecording request structure.
 * @class
 */
class CreateCloudRecordingRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The [SDKAppID](https://intl.cloud.tencent.com/document/product/647/37714) of the TRTC room whose streams are recorded.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The [room ID](https://intl.cloud.tencent.com/document/product/647/37714) of the TRTC room whose streams are recorded.
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * The [user ID](https://www.tencentcloud.com/document/product/647/37714#userid) of the recording robot in the TRTC room, which cannot be identical to the user IDs of anchors in the room or other recording robots. To distinguish this user ID from others, we recommend you include the room ID in the user ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * The signature (similar to a login password) required for the recording robot to enter the room. Each user ID corresponds to a signature. For information on how to calculate the signature, see [What is UserSig?](https://intl.cloud.tencent.com/document/product/647/38104).
         * @type {string || null}
         */
        this.UserSig = null;

        /**
         * The on-cloud recording parameters.
         * @type {RecordParams || null}
         */
        this.RecordParams = null;

        /**
         * The storage information of the recording file. Currently, you can save recording files to Tencent Cloud VOD or COS.
         * @type {StorageParams || null}
         */
        this.StorageParams = null;

        /**
         * The type of the TRTC room ID, which must be the same as the ID type of the room whose streams are recorded.
0: String
1: 32-bit integer (default)
         * @type {number || null}
         */
        this.RoomIdType = null;

        /**
         * The stream mixing parameters, which are valid if the mixed-stream recording mode is used.
         * @type {MixTranscodeParams || null}
         */
        this.MixTranscodeParams = null;

        /**
         * The layout parameters, which are valid if the mixed-stream recording mode is used.
         * @type {MixLayoutParams || null}
         */
        this.MixLayoutParams = null;

        /**
         * The amount of time (in hours) during which API requests can be made after recording starts. Calculation starts when a recording task is started (when the recording task ID is returned). Once the period elapses, the query, modification, and stop recording APIs can no longer be called, but the recording task will continue. The default value is `72` (three days), and the maximum and minimum values allowed are `720` (30 days) and `6` respectively. If you do not set this parameter, the query, modification, and stop recording APIs can be called within 72 hours after recording starts.
         * @type {number || null}
         */
        this.ResourceExpiredHour = null;

        /**
         * The permission ticket for a TRTC room. This parameter is required if advanced permission control is enabled in the console, in which case the TRTC backend will verify users’ [PrivateMapKey](https://intl.cloud.tencent.com/document/product/647/32240?from_cn_redirect=1), which include an encrypted room ID and permission bit list. A user providing only `UserSig` and not `PrivateMapKey` will be unable to enter the room.
         * @type {string || null}
         */
        this.PrivateMapKey = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserSig = 'UserSig' in params ? params.UserSig : null;

        if (params.RecordParams) {
            let obj = new RecordParams();
            obj.deserialize(params.RecordParams)
            this.RecordParams = obj;
        }

        if (params.StorageParams) {
            let obj = new StorageParams();
            obj.deserialize(params.StorageParams)
            this.StorageParams = obj;
        }
        this.RoomIdType = 'RoomIdType' in params ? params.RoomIdType : null;

        if (params.MixTranscodeParams) {
            let obj = new MixTranscodeParams();
            obj.deserialize(params.MixTranscodeParams)
            this.MixTranscodeParams = obj;
        }

        if (params.MixLayoutParams) {
            let obj = new MixLayoutParams();
            obj.deserialize(params.MixLayoutParams)
            this.MixLayoutParams = obj;
        }
        this.ResourceExpiredHour = 'ResourceExpiredHour' in params ? params.ResourceExpiredHour : null;
        this.PrivateMapKey = 'PrivateMapKey' in params ? params.PrivateMapKey : null;

    }
}

/**
 * Configuration used by speech recognition
 * @class
 */
class RecognizeConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * The supported languages for speech recognition are as follows, with the default being "zh" for Chinese. The values for the `Language` field follow the [ISO639](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) standard. Here is the full list of supported languages:

1. Chinese = "zh"
2. Chinese_TW = "zh-TW"
3. Chinese_DIALECT = "zh-dialect"
4. English = "en"
5. Vietnamese = "vi"
6. Japanese = "ja"
7. Korean = "ko"
8. Indonesian = "id"
9. Thai = "th"
10. Portuguese = "pt"
11. Turkish = "tr"
12. Arabic = "ar"
13. Spanish = "es"
14. Hindi = "hi"
15. French = "fr"
16. Malay = "ms"
17. Filipino = "fil"
18. German = "de"
19. Italian = "it"
20. Russian = "ru"

**Note:** If the language you need is not listed, please contact our technical support team.
         * @type {string || null}
         */
        this.Language = null;

        /**
         * Initiate fuzzy recognition to replace additional language types. Fill in up to 3 language types. Note: When Language is specified as "zh-dialect", fuzzy recognition is not supported and this field is invalid.
         * @type {Array.<string> || null}
         */
        this.AlternativeLanguage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Language = 'Language' in params ? params.Language : null;
        this.AlternativeLanguage = 'AlternativeLanguage' in params ? params.AlternativeLanguage : null;

    }
}

/**
 * DeleteCloudRecording response structure.
 * @class
 */
class DeleteCloudRecordingResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The task ID assigned by the recording service, which uniquely identifies a recording process and becomes invalid after a recording task ends.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StartAITranscription request structure.
 * @class
 */
class StartAITranscriptionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TRTC's [SdkAppId](https://cloud.tencent.com/document/product/647/46351#sdkappid) is the same as the SdkAppId used by the room that starts the transcription task.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * TRTC's [RoomId](https://cloud.tencent.com/document/product/647/46351#roomid), which indicates the room number where the transcription task is started.
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * Parameters of the transcription robot.
         * @type {TranscriptionParams || null}
         */
        this.TranscriptionParams = null;

        /**
         * The unique ID passed by the caller is used by the server to deduplicate. Note: If this parameter is passed, the server will use it first to deduplicate. If this parameter is not passed, the server's deduplication strategy is as follows: 
- If the TranscriptionMode field is 0, only one task can be opened in a room
- If the TranscriptionMode field is 1, only one task can be opened in a TargetUserId
         * @type {string || null}
         */
        this.SessionId = null;

        /**
         * The type of TRTC room number. 0 represents a numeric room number, and 1 represents a string room number. If not filled in, the default is a numeric room number.
         * @type {number || null}
         */
        this.RoomIdType = null;

        /**
         * Speech recognition configuration.
         * @type {RecognizeConfig || null}
         */
        this.RecognizeConfig = null;

        /**
         * Translation config.
         * @type {TranslationConfig || null}
         */
        this.TranslationConfig = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;

        if (params.TranscriptionParams) {
            let obj = new TranscriptionParams();
            obj.deserialize(params.TranscriptionParams)
            this.TranscriptionParams = obj;
        }
        this.SessionId = 'SessionId' in params ? params.SessionId : null;
        this.RoomIdType = 'RoomIdType' in params ? params.RoomIdType : null;

        if (params.RecognizeConfig) {
            let obj = new RecognizeConfig();
            obj.deserialize(params.RecognizeConfig)
            this.RecognizeConfig = obj;
        }

        if (params.TranslationConfig) {
            let obj = new TranslationConfig();
            obj.deserialize(params.TranslationConfig)
            this.TranslationConfig = obj;
        }

    }
}

/**
 * The quality data returned by ES.
 * @class
 */
class QualityData extends  AbstractModel {
    constructor(){
        super();

        /**
         * The quality data.
         * @type {Array.<TimeValue> || null}
         */
        this.Content = null;

        /**
         * The user ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * The remote user ID. An empty string indicates that the data is upstream data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PeerId = null;

        /**
         * The data type.
         * @type {string || null}
         */
        this.DataType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Content) {
            this.Content = new Array();
            for (let z in params.Content) {
                let obj = new TimeValue();
                obj.deserialize(params.Content[z]);
                this.Content.push(obj);
            }
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.PeerId = 'PeerId' in params ? params.PeerId : null;
        this.DataType = 'DataType' in params ? params.DataType : null;

    }
}

/**
 * Moderation file storage parameters.
 * @class
 */
class ModerationStorageParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information about Tencent COS and third-party cloud storage accounts.
         * @type {CloudModerationStorage || null}
         */
        this.CloudModerationStorage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CloudModerationStorage) {
            let obj = new CloudModerationStorage();
            obj.deserialize(params.CloudModerationStorage)
            this.CloudModerationStorage = obj;
        }

    }
}

/**
 * ModifyCloudRecording request structure.
 * @class
 */
class ModifyCloudRecordingRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `SDKAppID` of the room whose streams are recorded.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The unique ID of the recording task, which is returned after recording starts successfully.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The new stream mixing layout to use.
         * @type {MixLayoutParams || null}
         */
        this.MixLayoutParams = null;

        /**
         * The allowlist/blocklist for stream subscription.
         * @type {SubscribeStreamUserIds || null}
         */
        this.SubscribeStreamUserIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

        if (params.MixLayoutParams) {
            let obj = new MixLayoutParams();
            obj.deserialize(params.MixLayoutParams)
            this.MixLayoutParams = obj;
        }

        if (params.SubscribeStreamUserIds) {
            let obj = new SubscribeStreamUserIds();
            obj.deserialize(params.SubscribeStreamUserIds)
            this.SubscribeStreamUserIds = obj;
        }

    }
}

/**
 * StopAIConversation response structure.
 * @class
 */
class StopAIConversationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StartPublishCdnStream request structure.
 * @class
 */
class StartPublishCdnStreamRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The [SDKAppID](https://intl.cloud.tencent.com/document/product/647/37714) of the TRTC room whose streams are relayed.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The ID of the room whose streams are relayed (the main room).
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * The type of the `RoomId` parameter, which must be the same as the ID type of the room whose streams are relayed. 0: integer; 1: string.
         * @type {number || null}
         */
        this.RoomIdType = null;

        /**
         * The information of the relaying robot in the room.
         * @type {AgentParams || null}
         */
        this.AgentParams = null;

        /**
         * Whether to transcode the streams. `0`: No. `1`: Yes. This parameter determines whether transcoding fees are charged. If it is `0`, streams will only be relayed, and no transcoding fees will be incurred. If it is `1`, streams will be transcoded before being relayed, and transcoding fees will be incurred.
         * @type {number || null}
         */
        this.WithTranscoding = null;

        /**
         * The audio encoding parameters. Because audio is always transcoded (no fees are incurred), this parameter is required when you start a relay task.
         * @type {McuAudioParams || null}
         */
        this.AudioParams = null;

        /**
         * The video encoding parameters for relaying. If you do not pass this parameter, only audio will be relayed.
         * @type {McuVideoParams || null}
         */
        this.VideoParams = null;

        /**
         * The information of a single stream relayed. When you relay a single stream, set `WithTranscoding` to 0.
         * @type {SingleSubscribeParams || null}
         */
        this.SingleSubscribeParams = null;

        /**
         * The information of the CDNs to relay to. You need to specify at least one between this parameter and `FeedBackRoomParams.N`.
         * @type {Array.<McuPublishCdnParam> || null}
         */
        this.PublishCdnParams = null;

        /**
         * The stream mixing SEI parameters.
         * @type {McuSeiParams || null}
         */
        this.SeiParams = null;

        /**
         * The information of the room to which streams are relayed. Between this parameter and `PublishCdnParams`, you must specify at least one. Please note that relaying to a TRTC room is only supported in some SDK versions. For details, please contact technical support.
         * @type {Array.<McuFeedBackRoomParams> || null}
         */
        this.FeedBackRoomParams = null;

        /**
         * Relay Recording Parameters.
Example value:{"UniRecord":1,"RecordKey": "test_recore_key_a"}
         * @type {McuRecordParams || null}
         */
        this.RecordParams = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.RoomIdType = 'RoomIdType' in params ? params.RoomIdType : null;

        if (params.AgentParams) {
            let obj = new AgentParams();
            obj.deserialize(params.AgentParams)
            this.AgentParams = obj;
        }
        this.WithTranscoding = 'WithTranscoding' in params ? params.WithTranscoding : null;

        if (params.AudioParams) {
            let obj = new McuAudioParams();
            obj.deserialize(params.AudioParams)
            this.AudioParams = obj;
        }

        if (params.VideoParams) {
            let obj = new McuVideoParams();
            obj.deserialize(params.VideoParams)
            this.VideoParams = obj;
        }

        if (params.SingleSubscribeParams) {
            let obj = new SingleSubscribeParams();
            obj.deserialize(params.SingleSubscribeParams)
            this.SingleSubscribeParams = obj;
        }

        if (params.PublishCdnParams) {
            this.PublishCdnParams = new Array();
            for (let z in params.PublishCdnParams) {
                let obj = new McuPublishCdnParam();
                obj.deserialize(params.PublishCdnParams[z]);
                this.PublishCdnParams.push(obj);
            }
        }

        if (params.SeiParams) {
            let obj = new McuSeiParams();
            obj.deserialize(params.SeiParams)
            this.SeiParams = obj;
        }

        if (params.FeedBackRoomParams) {
            this.FeedBackRoomParams = new Array();
            for (let z in params.FeedBackRoomParams) {
                let obj = new McuFeedBackRoomParams();
                obj.deserialize(params.FeedBackRoomParams[z]);
                this.FeedBackRoomParams.push(obj);
            }
        }

        if (params.RecordParams) {
            let obj = new McuRecordParams();
            obj.deserialize(params.RecordParams)
            this.RecordParams = obj;
        }

    }
}

/**
 * DescribeAIConversation request structure.
 * @class
 */
class DescribeAIConversationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TRTC's [SdkAppId](https://cloud.tencent.com/document/product/647/46351#sdkappid) is the same as the SdkAppId used by the room that starts the transcription task.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The unique ID of the task.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The SessionId filled in when starting the task. 
         * @type {string || null}
         */
        this.SessionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.SessionId = 'SessionId' in params ? params.SessionId : null;

    }
}

/**
 * Two-dimensional array of SeriesInfo type
 * @class
 */
class RowValues extends  AbstractModel {
    constructor(){
        super();

        /**
         * Data value
         * @type {Array.<number> || null}
         */
        this.RowValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RowValue = 'RowValue' in params ? params.RowValue : null;

    }
}

/**
 * DismissRoomByStrRoomId request structure.
 * @class
 */
class DismissRoomByStrRoomIdRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * `SDKAppId` of TRTC
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * Room ID
         * @type {string || null}
         */
        this.RoomId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;

    }
}

/**
 * StartStreamIngest response structure.
 * @class
 */
class StartStreamIngestResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The Task ID of the Pull stream Relay. The Task ID is a unique identifier for a Pull stream Relay lifecycle process, and it loses its meaning when the task ends. The Task ID needs to be saved by the business as a parameter for the next operation on this task.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateCloudSliceTask response structure.
 * @class
 */
class CreateCloudSliceTaskResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID assigned by the cloud slicing service. It is a unique identifier for the lifecycle of a slicing task, which loses its significance after the task is completed. The task ID needs to be retained by the business system as a parameter for future operations related to this task.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteCloudRecording request structure.
 * @class
 */
class DeleteCloudRecordingRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `SDKAppID` of the room whose streams are recorded.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The unique ID of the recording task, which is returned after recording starts successfully.
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * ModifyCloudModeration response structure.
 * @class
 */
class ModifyCloudModerationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the moderation task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Translation terminology
 * @class
 */
class Terminology extends  AbstractModel {
    constructor(){
        super();

        /**
         * Source terminology
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Target terminology
         * @type {string || null}
         */
        this.Target = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Source = 'Source' in params ? params.Source : null;
        this.Target = 'Target' in params ? params.Target : null;

    }
}

/**
 * The video transcoding parameters for recording.
 * @class
 */
class VideoParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The video width in pixels. The value of this parameter cannot be larger than 1920, and the result of multiplying `Width` and `Height` cannot exceed 1920 x 1080. The default value is `360`.
         * @type {number || null}
         */
        this.Width = null;

        /**
         * The video height in pixels. The value of this parameter cannot be larger than 1920, and the result of multiplying `Width` and `Height` cannot exceed 1920 x 1080. The default value is `640`.
         * @type {number || null}
         */
        this.Height = null;

        /**
         * The video frame rate. Value range: [1, 60]. Default: 15.
         * @type {number || null}
         */
        this.Fps = null;

        /**
         * The video bitrate (bps). Value range: [64000, 8192000]. Default: 550000.
         * @type {number || null}
         */
        this.BitRate = null;

        /**
         * The keyframe interval (seconds). Default value: 10.
         * @type {number || null}
         */
        this.Gop = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Width = 'Width' in params ? params.Width : null;
        this.Height = 'Height' in params ? params.Height : null;
        this.Fps = 'Fps' in params ? params.Fps : null;
        this.BitRate = 'BitRate' in params ? params.BitRate : null;
        this.Gop = 'Gop' in params ? params.Gop : null;

    }
}

/**
 * StopStreamIngest response structure.
 * @class
 */
class StopStreamIngestResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SetUserBlockedByStrRoomId request structure.
 * @class
 */
class SetUserBlockedByStrRoomIdRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The application ID.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The room ID (string).
         * @type {string || null}
         */
        this.StrRoomId = null;

        /**
         * The user ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Controls the activation state of audio and video.
0: Enable audio and video,
1: Disable audio and video,
2: Disable audio only,
3: Disable video only.
         * @type {number || null}
         */
        this.IsMute = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.StrRoomId = 'StrRoomId' in params ? params.StrRoomId : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.IsMute = 'IsMute' in params ? params.IsMute : null;

    }
}

/**
 * DescribeTrtcRoomUsage request structure.
 * @class
 */
class DescribeTrtcRoomUsageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The `SDKAppID` of the room.
         * @type {number || null}
         */
        this.SdkAppid = null;

        /**
         * The start time in the format of `YYYY-MM-DD HH:MM` (accurate to the minute).
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * The end time in the format of `YYYY-MM-DD HH:MM`. The start and end time cannot be more than 24 hours apart.
         * @type {string || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppid = 'SdkAppid' in params ? params.SdkAppid : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * CreateCloudModeration request structure.
 * @class
 */
class CreateCloudModerationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * [SdkAppId](https://www.tencentcloud.comom/document/product/647/46351?from_cn_redirect=1#sdkappid) of TRTC, which is the same as the SdkAppId corresponding to the TRTC room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * [RoomId](https://www.tencentcloud.comom/document/product/647/46351?from_cn_redirect=1#roomid) of TRTC, which is the RoomId corresponding to the TRTC room.
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * Chatbot's UserId, which is used to enter the room and initiate a moderation task. [*Note] This UserId should not be duplicated with the UserIds of the current anchors or audience members in the room. If multiple moderation tasks are initiated in one room, the chatbot's UserId should also be unique; otherwise, the previous moderation task is interrupted. It is recommended to include the room ID as part of the UserId, ensuring that the chatbot's UserId is unique in the room.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Signature verification corresponding to the chatbot's UserId, namely, the UserId and UserSig serve as the login password for the chatbot to enter the room. For specific calculation methods, see TRTC solution for calculating UserSig.
         * @type {string || null}
         */
        this.UserSig = null;

        /**
         * Control parameters for cloud moderation.
         * @type {ModerationParams || null}
         */
        this.ModerationParams = null;

        /**
         * Parameters for uploading cloud moderation files to the cloud storage.
         * @type {ModerationStorageParams || null}
         */
        this.ModerationStorageParams = null;

        /**
         * Type of the TRTC room number. [*Note] It should be the same as the type of the RoomId corresponding to the recording room. 0: string type; 1: 32-bit integer type (default value). Example value: 1.
         * @type {number || null}
         */
        this.RoomIdType = null;

        /**
         * Validity period for calling the task ID, which starts upon successful initiation of the task and obtaining the task ID. After the timeout, APIs such as querying, updating, or stopping cannot be called, but the moderation task is not stopped. The unit of the parameter is hours, with a default value of 24 hours (1 day). The maximum value is 72 hours (3 days), while the minimum value is 6 hours. For example, if this parameter is not specified, the validity period for calling the querying, updating, and stopping slicing APIs is 24 hours upon the successful start of slicing.
         * @type {number || null}
         */
        this.ResourceExpiredHour = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserSig = 'UserSig' in params ? params.UserSig : null;

        if (params.ModerationParams) {
            let obj = new ModerationParams();
            obj.deserialize(params.ModerationParams)
            this.ModerationParams = obj;
        }

        if (params.ModerationStorageParams) {
            let obj = new ModerationStorageParams();
            obj.deserialize(params.ModerationStorageParams)
            this.ModerationStorageParams = obj;
        }
        this.RoomIdType = 'RoomIdType' in params ? params.RoomIdType : null;
        this.ResourceExpiredHour = 'ResourceExpiredHour' in params ? params.ResourceExpiredHour : null;

    }
}

/**
 * 
 * @class
 */
class WebRecordVideoParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * 
         * @type {number || null}
         */
        this.Width = null;

        /**
         * 
         * @type {number || null}
         */
        this.Height = null;

        /**
         * 
         * @type {string || null}
         */
        this.Format = null;

        /**
         * 
         * @type {number || null}
         */
        this.MaxMediaFileDuration = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Width = 'Width' in params ? params.Width : null;
        this.Height = 'Height' in params ? params.Height : null;
        this.Format = 'Format' in params ? params.Format : null;
        this.MaxMediaFileDuration = 'MaxMediaFileDuration' in params ? params.MaxMediaFileDuration : null;

    }
}

/**
 * The user information, including when the user entered/left the room.
 * @class
 */
class UserInformation extends  AbstractModel {
    constructor(){
        super();

        /**
         * The room ID.
         * @type {string || null}
         */
        this.RoomStr = null;

        /**
         * The user ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * The time when the user entered the room.
         * @type {number || null}
         */
        this.JoinTs = null;

        /**
         * The time when the user left the room. If the user is still in the room, the current time will be returned.
         * @type {number || null}
         */
        this.LeaveTs = null;

        /**
         * The device type.
         * @type {string || null}
         */
        this.DeviceType = null;

        /**
         * The SDK version number.
         * @type {string || null}
         */
        this.SdkVersion = null;

        /**
         * The client IP address.
         * @type {string || null}
         */
        this.ClientIp = null;

        /**
         * Whether a user has left the room.
         * @type {boolean || null}
         */
        this.Finished = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoomStr = 'RoomStr' in params ? params.RoomStr : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.JoinTs = 'JoinTs' in params ? params.JoinTs : null;
        this.LeaveTs = 'LeaveTs' in params ? params.LeaveTs : null;
        this.DeviceType = 'DeviceType' in params ? params.DeviceType : null;
        this.SdkVersion = 'SdkVersion' in params ? params.SdkVersion : null;
        this.ClientIp = 'ClientIp' in params ? params.ClientIp : null;
        this.Finished = 'Finished' in params ? params.Finished : null;

    }
}

/**
 * DescribeScaleInfo request structure.
 * @class
 */
class DescribeScaleInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The application ID, such as `1400xxxxxx`.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The start time, which is a Unix timestamp (seconds) in local time, such as `1590065777`.
Note: Only data in the last 14 days can be queried.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * The end time, which is a Unix timestamp (seconds) in local time, such as `1590065877`. The end time and start time should preferably be more than 24 hours apart.
Note: Data is collected on a daily basis. To query the data of a day, make sure the end time is later than 00:00 on that day. Otherwise, no data will be returned. For example, to query the data on the 20th, the end time must be later than 00:00 on the 20th.
         * @type {number || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * ControlAIConversation request structure.
 * @class
 */
class ControlAIConversationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the task
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Control commands, currently supported commands are as follows:
- ServerPushText, the server sends text to the AI robot, and the AI robot will play the text
         * @type {string || null}
         */
        this.Command = null;

        /**
         * The server sends a text broadcast command. This is required when Command is ServerPushText.
         * @type {ServerPushText || null}
         */
        this.ServerPushText = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.Command = 'Command' in params ? params.Command : null;

        if (params.ServerPushText) {
            let obj = new ServerPushText();
            obj.deserialize(params.ServerPushText)
            this.ServerPushText = obj;
        }

    }
}

/**
 * DismissRoomByStrRoomId response structure.
 * @class
 */
class DismissRoomByStrRoomIdResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUnusualEvent response structure.
 * @class
 */
class DescribeUnusualEventResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of records returned.
Value range: 0-20.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The information of the abnormal user experiences.
         * @type {Array.<AbnormalExperience> || null}
         */
        this.AbnormalExperienceList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.AbnormalExperienceList) {
            this.AbnormalExperienceList = new Array();
            for (let z in params.AbnormalExperienceList) {
                let obj = new AbnormalExperience();
                obj.deserialize(params.AbnormalExperienceList[z]);
                this.AbnormalExperienceList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyCloudRecording response structure.
 * @class
 */
class ModifyCloudRecordingResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The task ID assigned by the recording service, which uniquely identifies a recording process and becomes invalid after a recording task ends.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The information of a single stream relayed.
 * @class
 */
class SingleSubscribeParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The stream information.
         * @type {UserMediaStream || null}
         */
        this.UserMediaStream = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UserMediaStream) {
            let obj = new UserMediaStream();
            obj.deserialize(params.UserMediaStream)
            this.UserMediaStream = obj;
        }

    }
}

/**
 * CreateCloudSliceTask request structure.
 * @class
 */
class CreateCloudSliceTaskRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * [SdkAppId](https://www.tencentcloud.comom/document/product/647/46351?from_cn_redirect=1#sdkappid) of TRTC, which is the same as the SdkAppId corresponding to the TRTC room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * [RoomId](https://www.tencentcloud.comom/document/product/647/46351?from_cn_redirect=1#roomid) of TRTC, which is the RoomId corresponding to the TRTC room.
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * Chatbot's UserId, which is used to enter the room and initiate a slicing task. [*note] This UserId should not be duplicated with the UserIds of the current anchors or audience members in the room. If multiple slicing tasks are initiated in one room, the chatbot's UserId should also be unique; otherwise, the previous slicing task is interrupted. It is recommended to include the room ID as part of the UserId, ensuring that the chatbot's UserId is unique in the room.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Signature verification corresponding to the chatbot's UserId, namely, the UserId and UserSig serve as the login password for the chatbot to enter the room. For specific calculation methods, see TRTC solution for calculating UserSig.
         * @type {string || null}
         */
        this.UserSig = null;

        /**
         * Control parameters for cloud slicing.
         * @type {SliceParams || null}
         */
        this.SliceParams = null;

        /**
         * Parameters for uploading cloud slicing files to the cloud storage.
         * @type {SliceStorageParams || null}
         */
        this.SliceStorageParams = null;

        /**
         * Type of the TRTC room number. [*Note] It should be the same as the type of the RoomId corresponding to the recording room. 0: string type; 1: 32-bit integer type (default value). Example value: 1.
         * @type {number || null}
         */
        this.RoomIdType = null;

        /**
         * Validity period for calling the API, which starts upon successful initiation of recording and obtaining the task ID. After the timeout, APIs such as querying, updating, or stopping cannot be called, but the recording task is not stopped. The unit of the parameter is hours, with a default value of 72 hours (3 days). The maximum value is 720 hours (30 days), while the minimum value is 6 hours. For example, if this parameter is not specified, the validity period for calling the querying, updating, and stopping recording APIs is 72 hours upon the successful start of recording. Example value: 24.
         * @type {number || null}
         */
        this.ResourceExpiredHour = null;

        /**
         * TRTC room permission encryption string, which is required only when advanced permission control is enabled in the TRTC console. After enabling, the TRTC backend service system verifies a "permission ticket" called [PrivateMapKey], which contains an encrypted RoomId and an encrypted "permission bit list". Since the PrivateMapKey includes the RoomId, the specified room cannot be entered if only UserSig is provided and PrivateMapKey is not provided. Example value: eJw1jcEKgkAURX9FZlvY****fL9rfNX4_.
         * @type {string || null}
         */
        this.PrivateMapKey = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserSig = 'UserSig' in params ? params.UserSig : null;

        if (params.SliceParams) {
            let obj = new SliceParams();
            obj.deserialize(params.SliceParams)
            this.SliceParams = obj;
        }

        if (params.SliceStorageParams) {
            let obj = new SliceStorageParams();
            obj.deserialize(params.SliceStorageParams)
            this.SliceStorageParams = obj;
        }
        this.RoomIdType = 'RoomIdType' in params ? params.RoomIdType : null;
        this.ResourceExpiredHour = 'ResourceExpiredHour' in params ? params.ResourceExpiredHour : null;
        this.PrivateMapKey = 'PrivateMapKey' in params ? params.PrivateMapKey : null;

    }
}

/**
 * Control parameters for cloud moderation.
 * @class
 */
class ModerationParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Moderation task type. 1: audio slicing moderation; 2: video frame extraction moderation; 3: audio slicing moderation + video frame extraction moderation; 4: audio stream moderation; 5: audio stream moderation + video frame extraction moderation. The default value is 1. (Support from suppliers is required for stream moderation to take effect.)
         * @type {number || null}
         */
        this.ModerationType = null;

        /**
         * Slicing is stopped automatically when there is no user (anchor) performing upstream push in the room for more than MaxIdleTime. Unit: seconds. Default value: 30 seconds. This value needs to be greater than or equal to 5 seconds and less than or equal to 1800 seconds (0.5 hours). Example value: 30.
         * @type {number || null}
         */
        this.MaxIdleTime = null;

        /**
         * Audio slicing duration. Default value: 15s. Example value: 15.
         * @type {number || null}
         */
        this.SliceAudio = null;

        /**
         * Interval for video frame extraction. Default value: 5s.
         * @type {number || null}
         */
        this.SliceVideo = null;

        /**
         * Enumeration values for suppliers.
tianyu: Tencent Tianyu content security. (Valid values: 1: audio slicing moderation; 2: video frame extraction moderation; 3: audio-visual slicing moderation + video frame extraction moderation.)
ace: ACE content security. (Valid values: 1: audio slicing moderation; 2: video frame extraction moderation; 3: audio-visual slicing moderation + video frame extraction moderation.)
shumei: shumei moderation. (Valid values: 1: audio slicing moderation; 2: video frame extraction moderation; 3: audio-visual slicing moderation + video frame extraction moderation.)
Yidun: NetEase Yidun moderation. (Valid values: 1: audio slicing moderation; 2: video frame extraction moderation; 3: audio-visual slicing moderation + video frame extraction moderation.)
         * @type {string || null}
         */
        this.ModerationSupplier = null;

        /**
         * Configuration information required for submitting content to the third-party moderation supplier.
         * @type {ModerationSupplierParam || null}
         */
        this.ModerationSupplierParam = null;

        /**
         * Whether to save the hit file. 0: not save by default; 1: save.
         * @type {number || null}
         */
        this.SaveModerationFile = null;

        /**
         * Whether to call back all moderation results: 0: call back all results by default; 1: only call back hit results.
         * @type {number || null}
         */
        this.CallbackAllResults = null;

        /**
         * Specifies the allowlist or blocklist for the subscription stream.
         * @type {SubscribeModerationUserIds || null}
         */
        this.SubscribeStreamUserIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ModerationType = 'ModerationType' in params ? params.ModerationType : null;
        this.MaxIdleTime = 'MaxIdleTime' in params ? params.MaxIdleTime : null;
        this.SliceAudio = 'SliceAudio' in params ? params.SliceAudio : null;
        this.SliceVideo = 'SliceVideo' in params ? params.SliceVideo : null;
        this.ModerationSupplier = 'ModerationSupplier' in params ? params.ModerationSupplier : null;

        if (params.ModerationSupplierParam) {
            let obj = new ModerationSupplierParam();
            obj.deserialize(params.ModerationSupplierParam)
            this.ModerationSupplierParam = obj;
        }
        this.SaveModerationFile = 'SaveModerationFile' in params ? params.SaveModerationFile : null;
        this.CallbackAllResults = 'CallbackAllResults' in params ? params.CallbackAllResults : null;

        if (params.SubscribeStreamUserIds) {
            let obj = new SubscribeModerationUserIds();
            obj.deserialize(params.SubscribeStreamUserIds)
            this.SubscribeStreamUserIds = obj;
        }

    }
}

/**
 * DescribeCloudSliceTask request structure.
 * @class
 */
class DescribeCloudSliceTaskRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * SDKAppId of TRTC, which is the same as the SDKAppId corresponding to the recording room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * Unique ID of the slicing task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * StopPublishCdnStream request structure.
 * @class
 */
class StopPublishCdnStreamRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The [SDKAppID](https://intl.cloud.tencent.com/document/product/647/37714) of the TRTC room whose streams are relayed.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The task ID.
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * The user information.
 * @class
 */
class MixUserInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * If a dynamic layout is used, the value of this parameter should be the ID of the main room. If a custom layout is used, the value of this parameter should be the same as the room ID in `MixLayoutList`.
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * The type of the `RoomId` parameter. 0: integer; 1: string.
         * @type {number || null}
         */
        this.RoomIdType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.RoomIdType = 'RoomIdType' in params ? params.RoomIdType : null;

    }
}

/**
 * The event information, including the timestamp and event ID.
 * @class
 */
class EventMessage extends  AbstractModel {
    constructor(){
        super();

        /**
         * The video stream type. Valid values:
`0`: A non-video event
`2`: The big video
`3`: The small video
`7`: A relayed video
         * @type {number || null}
         */
        this.Type = null;

        /**
         * The event reporting time in the format of UNIX timestamp (milliseconds), such as `1589891188801`.
         * @type {number || null}
         */
        this.Time = null;

        /**
         * The event ID. Events are classified into SDK events and WebRTC events. For more information, see https://www.tencentcloud.com/document/product/647/37906?has_map=1
         * @type {number || null}
         */
        this.EventId = null;

        /**
         * The first event parameter, such as the video width.
         * @type {number || null}
         */
        this.ParamOne = null;

        /**
         * The second event parameter, such as the video height.
         * @type {number || null}
         */
        this.ParamTwo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;
        this.Time = 'Time' in params ? params.Time : null;
        this.EventId = 'EventId' in params ? params.EventId : null;
        this.ParamOne = 'ParamOne' in params ? params.ParamOne : null;
        this.ParamTwo = 'ParamTwo' in params ? params.ParamTwo : null;

    }
}

/**
 * DescribeTRTCMarketQualityData request structure.
 * @class
 */
class DescribeTRTCMarketQualityDataRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User SDKAppId (e.g., 1400xxxxxx)
         * @type {string || null}
         */
        this.SdkAppId = null;

        /**
         * Query start time, format is YYYY-MM-DD. (The query time range depends on the monitoring dashboard function version, the premium edition can query up to 30 days)
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Query end time, format is YYYY-MM-DD.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * The granularity of the returned data, which can be set to the following values:
d: by day. This returns data for the entire UTC day of the query time range. 
h: by hour. This returns data for the entire UTC hour of the query time range.
         * @type {string || null}
         */
        this.Period = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Period = 'Period' in params ? params.Period : null;

    }
}

/**
 * UpdatePublishCdnStream request structure.
 * @class
 */
class UpdatePublishCdnStreamRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The [SDKAppID](https://intl.cloud.tencent.com/document/product/647/37714) of the TRTC room whose streams are relayed.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The task ID.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The sequence of a request. This parameter ensures the requests to change the parameters of the same relaying task are in the correct order. It increases each time a new request is made.
         * @type {number || null}
         */
        this.SequenceNumber = null;

        /**
         * Whether to transcode the streams. 0: No; 1: Yes.
         * @type {number || null}
         */
        this.WithTranscoding = null;

        /**
         * Pass this parameter to change the users whose audios are mixed. If you do not pass this parameter, no changes will be made.
         * @type {McuAudioParams || null}
         */
        this.AudioParams = null;

        /**
         * Pass this parameter to change video parameters other than the codec, including the video layout, background image, background color, and watermark information. This parameter is valid only if streams are transcoded. If you do not pass it, no changes will be made.
         * @type {McuVideoParams || null}
         */
        this.VideoParams = null;

        /**
         * Pass this parameter to change the single stream that is relayed. This parameter is valid only if streams are not transcoded. If you do not pass this parameter, no changes will be made.
         * @type {SingleSubscribeParams || null}
         */
        this.SingleSubscribeParams = null;

        /**
         * Pass this parameter to change the CDNs to relay to. If you do not pass this parameter, no changes will be made.
         * @type {Array.<McuPublishCdnParam> || null}
         */
        this.PublishCdnParams = null;

        /**
         * The stream mixing SEI parameters.
         * @type {McuSeiParams || null}
         */
        this.SeiParams = null;

        /**
         * The information of the room to which streams are relayed.
         * @type {Array.<McuFeedBackRoomParams> || null}
         */
        this.FeedBackRoomParams = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.SequenceNumber = 'SequenceNumber' in params ? params.SequenceNumber : null;
        this.WithTranscoding = 'WithTranscoding' in params ? params.WithTranscoding : null;

        if (params.AudioParams) {
            let obj = new McuAudioParams();
            obj.deserialize(params.AudioParams)
            this.AudioParams = obj;
        }

        if (params.VideoParams) {
            let obj = new McuVideoParams();
            obj.deserialize(params.VideoParams)
            this.VideoParams = obj;
        }

        if (params.SingleSubscribeParams) {
            let obj = new SingleSubscribeParams();
            obj.deserialize(params.SingleSubscribeParams)
            this.SingleSubscribeParams = obj;
        }

        if (params.PublishCdnParams) {
            this.PublishCdnParams = new Array();
            for (let z in params.PublishCdnParams) {
                let obj = new McuPublishCdnParam();
                obj.deserialize(params.PublishCdnParams[z]);
                this.PublishCdnParams.push(obj);
            }
        }

        if (params.SeiParams) {
            let obj = new McuSeiParams();
            obj.deserialize(params.SeiParams)
            this.SeiParams = obj;
        }

        if (params.FeedBackRoomParams) {
            this.FeedBackRoomParams = new Array();
            for (let z in params.FeedBackRoomParams) {
                let obj = new McuFeedBackRoomParams();
                obj.deserialize(params.FeedBackRoomParams[z]);
                this.FeedBackRoomParams.push(obj);
            }
        }

    }
}

/**
 * Storage parameters for the slicing files.
 * @class
 */
class SliceStorageParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information about Tencent COS and third-party cloud storage accounts.
         * @type {CloudSliceStorage || null}
         */
        this.CloudSliceStorage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CloudSliceStorage) {
            let obj = new CloudSliceStorage();
            obj.deserialize(params.CloudSliceStorage)
            this.CloudSliceStorage = obj;
        }

    }
}

/**
 * The information of the large video in screen sharing or floating layout mode.
 * @class
 */
class MaxVideoUser extends  AbstractModel {
    constructor(){
        super();

        /**
         * The stream information.
         * @type {UserMediaStream || null}
         */
        this.UserMediaStream = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UserMediaStream) {
            let obj = new UserMediaStream();
            obj.deserialize(params.UserMediaStream)
            this.UserMediaStream = obj;
        }

    }
}

/**
 * UpdateStreamIngest request structure.
 * @class
 */
class UpdateStreamIngestRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The SDKAppId of TRTC should be the same as the SDKAppId corresponding to the task room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The unique Id of the task, will return after successfully starting the task.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The new url of the media resource.
         * @type {string || null}
         */
        this.StreamUrl = null;

        /**
         * Volume. Valid value range: [0, 100], default value is 100, indicating the original volume.
         * @type {number || null}
         */
        this.Volume = null;

        /**
         * Whether to pause, the default value of false indicates no pause. During the pause, the task is still in progress and is billed. If you want to terminate the task, please call the stop interface.
         * @type {boolean || null}
         */
        this.IsPause = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.StreamUrl = 'StreamUrl' in params ? params.StreamUrl : null;
        this.Volume = 'Volume' in params ? params.Volume : null;
        this.IsPause = 'IsPause' in params ? params.IsPause : null;

    }
}

/**
 * StopWebRecord response structure.
 * @class
 */
class StopWebRecordResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Speech-to-text parameters
 * @class
 */
class STTConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * The supported languages for speech recognition are as follows, with the default being "zh" for Chinese. The values for the `Language` field follow the [ISO639](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes) standard. Here is the full list of supported languages:

1. Chinese = "zh"
2. Chinese_TW = "zh-TW"
3. Chinese_DIALECT = "zh-dialect"
4. English = "en"
5. Vietnamese = "vi"
6. Japanese = "ja"
7. Korean = "ko"
8. Indonesian = "id"
9. Thai = "th"
10. Portuguese = "pt"
11. Turkish = "tr"
12. Arabic = "ar"
13. Spanish = "es"
14. Hindi = "hi"
15. French = "fr"
16. Malay = "ms"
17. Filipino = "fil"
18. German = "de"
19. Italian = "it"
20. Russian = "ru"

**Note:** If the language you need is not listed, please contact our technical support team.
         * @type {string || null}
         */
        this.Language = null;

        /**
         * Initiate fuzzy recognition to replace additional language types. Fill in up to 3 language types. Note: When Language is specified as "zh-dialect", fuzzy recognition is not supported and this field is invalid.
         * @type {Array.<string> || null}
         */
        this.AlternativeLanguage = null;

        /**
         * The time for speech recognition vad is in the range of 240-2000, the default value is 1000, and the unit is ms. A smaller value will make speech recognition sentence segmentation faster.
         * @type {number || null}
         */
        this.VadSilenceTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Language = 'Language' in params ? params.Language : null;
        this.AlternativeLanguage = 'AlternativeLanguage' in params ? params.AlternativeLanguage : null;
        this.VadSilenceTime = 'VadSilenceTime' in params ? params.VadSilenceTime : null;

    }
}

/**
 * StopWebRecord request structure.
 * @class
 */
class StopWebRecordRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the task that needs to be stopped
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * The stream mixing SEI parameters.
 * @class
 */
class McuSeiParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The audio volume layout SEI.
         * @type {McuLayoutVolume || null}
         */
        this.LayoutVolume = null;

        /**
         * The pass-through SEI.
         * @type {McuPassThrough || null}
         */
        this.PassThrough = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.LayoutVolume) {
            let obj = new McuLayoutVolume();
            obj.deserialize(params.LayoutVolume)
            this.LayoutVolume = obj;
        }

        if (params.PassThrough) {
            let obj = new McuPassThrough();
            obj.deserialize(params.PassThrough)
            this.PassThrough = obj;
        }

    }
}

/**
 * StopAIConversation request structure.
 * @class
 */
class StopAIConversationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task Unique ID
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * UpdateAIConversation request structure.
 * @class
 */
class UpdateAIConversationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task Unique ID
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * If you do not fill in the form, no update will be performed. Welcome message from the robot
         * @type {string || null}
         */
        this.WelcomeMessage = null;

        /**
         * If not filled in, no update will be performed. Intelligent interruption mode, 0 means the server automatically interrupts, 1 means the server does not interrupt, and the client sends an interrupt signal to interrupt
         * @type {number || null}
         */
        this.InterruptMode = null;

        /**
         * If not filled in, no update will be performed. Used when InterruptMode is 0, the unit is milliseconds, and the default is 500ms. It means that the server will interrupt when it detects a voice that lasts for InterruptSpeechDuration milliseconds.
         * @type {number || null}
         */
        this.InterruptSpeechDuration = null;

        /**
         * If not filled in, no update will be performed. For LLM configuration, see the StartAIConversation API for details.
         * @type {string || null}
         */
        this.LLMConfig = null;

        /**
         * If not filled in, no update will be performed. For TTS configuration, see the StartAIConversation API for details.
         * @type {string || null}
         */
        this.TTSConfig = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.WelcomeMessage = 'WelcomeMessage' in params ? params.WelcomeMessage : null;
        this.InterruptMode = 'InterruptMode' in params ? params.InterruptMode : null;
        this.InterruptSpeechDuration = 'InterruptSpeechDuration' in params ? params.InterruptSpeechDuration : null;
        this.LLMConfig = 'LLMConfig' in params ? params.LLMConfig : null;
        this.TTSConfig = 'TTSConfig' in params ? params.TTSConfig : null;

    }
}

/**
 * UpdatePublishCdnStream response structure.
 * @class
 */
class UpdatePublishCdnStreamResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The task ID.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The text watermark configuration.
 * @class
 */
class McuWaterMarkText extends  AbstractModel {
    constructor(){
        super();

        /**
         * The text.
         * @type {string || null}
         */
        this.Text = null;

        /**
         * The watermark width (pixels).
         * @type {number || null}
         */
        this.WaterMarkWidth = null;

        /**
         * The watermark height (pixels).
         * @type {number || null}
         */
        this.WaterMarkHeight = null;

        /**
         * The horizontal offset (pixels) of the watermark.
         * @type {number || null}
         */
        this.LocationX = null;

        /**
         * The vertical offset (pixels) of the watermark.
         * @type {number || null}
         */
        this.LocationY = null;

        /**
         * The font size.
         * @type {number || null}
         */
        this.FontSize = null;

        /**
         * The text color. The default color is white. Values for some commonly used colors: Red: `0xcc0033`; yellow: `0xcc9900`; green: `0xcccc33`; blue: `0x99CCFF`; black: `0x000000`; white: `0xFFFFFF`; gray: `0x999999`.	
         * @type {string || null}
         */
        this.FontColor = null;

        /**
         * The text fill color. If you do not specify this parameter, the fill color will be transparent. Values for some commonly used colors: Red: `0xcc0033`; yellow: `0xcc9900`; green: `0xcccc33`; blue: `0x99CCFF`; black: `0x000000`; white: `0xFFFFFF`; gray: `0x999999`.	
         * @type {string || null}
         */
        this.BackGroundColor = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Text = 'Text' in params ? params.Text : null;
        this.WaterMarkWidth = 'WaterMarkWidth' in params ? params.WaterMarkWidth : null;
        this.WaterMarkHeight = 'WaterMarkHeight' in params ? params.WaterMarkHeight : null;
        this.LocationX = 'LocationX' in params ? params.LocationX : null;
        this.LocationY = 'LocationY' in params ? params.LocationY : null;
        this.FontSize = 'FontSize' in params ? params.FontSize : null;
        this.FontColor = 'FontColor' in params ? params.FontColor : null;
        this.BackGroundColor = 'BackGroundColor' in params ? params.BackGroundColor : null;

    }
}

/**
 * AI Transcription Params
 * @class
 */
class TranscriptionParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The robot's UserId is used to enter a room and initiate tasks. [Note] This UserId cannot be repeated with the host viewer [UserId](https://cloud.tencent.com/document/product/647/46351#userid) in the current room. If multiple tasks are initiated in a room, the robot's UserId cannot be repeated, otherwise the previous task will be interrupted. The robot's UserId must be unique in the room.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * The verification signature corresponding to the robot's UserId, that is, UserId and UserSig are equivalent to the robot's login password to enter the room. For the specific calculation method, please refer to the TRTC calculation [UserSig](https://cloud.tencent.com/document/product/647/45910#UserSig) solution.
         * @type {string || null}
         */
        this.UserSig = null;

        /**
         * If there is no streaming in the room for more than MaxIdleTime, the background will automatically close the task. The default value is 60s.
         * @type {number || null}
         */
        this.MaxIdleTime = null;

        /**
         * 1 means the robot subscribes to the stream of only one person, 0 means the robot subscribes to the stream of the entire room. If it is not filled in, the robot subscribes to the stream of the entire room by default.
         * @type {number || null}
         */
        this.TranscriptionMode = null;

        /**
         * Required when TranscriptionMode is 1. The robot will only pull the stream of the userid and ignore other users in the room.
         * @type {string || null}
         */
        this.TargetUserId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserSig = 'UserSig' in params ? params.UserSig : null;
        this.MaxIdleTime = 'MaxIdleTime' in params ? params.MaxIdleTime : null;
        this.TranscriptionMode = 'TranscriptionMode' in params ? params.TranscriptionMode : null;
        this.TargetUserId = 'TargetUserId' in params ? params.TargetUserId : null;

    }
}

/**
 * SeriesInfos type
 * @class
 */
class SeriesInfos extends  AbstractModel {
    constructor(){
        super();

        /**
         * Data columns
         * @type {Array.<string> || null}
         */
        this.Columns = null;

        /**
         * Data values
         * @type {Array.<RowValues> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Columns = 'Columns' in params ? params.Columns : null;

        if (params.Values) {
            this.Values = new Array();
            for (let z in params.Values) {
                let obj = new RowValues();
                obj.deserialize(params.Values[z]);
                this.Values.push(obj);
            }
        }

    }
}

/**
 * RemoveUserByStrRoomId request structure.
 * @class
 */
class RemoveUserByStrRoomIdRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * `SDKAppId` of TRTC
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * Room ID
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * List of up to 10 users to be removed
         * @type {Array.<string> || null}
         */
        this.UserIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;
        this.UserIds = 'UserIds' in params ? params.UserIds : null;

    }
}

/**
 * The on-cloud recording parameters.
 * @class
 */
class RecordParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The recording mode.
1: Single-stream recording. Records the audio and video of each subscribed user (`UserId`) in a room and saves the recording files to the cloud.
2: Mixed-stream recording. Mixes the audios and videos of subscribed users (`UserId`) in a room, records the mixed stream, and saves the recording files to the cloud.
         * @type {number || null}
         */
        this.RecordMode = null;

        /**
         * The time period (seconds) to wait to automatically stop recording after there are no anchors (users who publish streams) in a room. Value range: 5-86400 (max 24 hours). Default value: 30.
         * @type {number || null}
         */
        this.MaxIdleTime = null;

        /**
         * The media type of the streams to record.
0: Audio and video streams (default)
1: Audio streams only
2: Video streams only
         * @type {number || null}
         */
        this.StreamType = null;

        /**
         * The allowlist/blocklist for stream subscription.
         * @type {SubscribeStreamUserIds || null}
         */
        this.SubscribeStreamUserIds = null;

        /**
         * The output format. `0` (default): HLS; `1`: HLS + MP4; `2`: HLS + AAC;  `3` : MP4,  `4` : AAC. This parameter is invalid if you save recording files to VOD. To specify the format of files saved to VOD, use `MediaType` of `TencentVod`.
         * @type {number || null}
         */
        this.OutputFormat = null;

        /**
         * Whether to merge the audio and video of a user in the single-stream recording mode. 0 (default): Do not mix the audio and video; 1: Mix the audio and video into one TS file. You don’t need to specify this parameter for mixed-stream recording, which merges audios and videos by default.
         * @type {number || null}
         */
        this.AvMerge = null;

        /**
         * The maximum file duration allowed (minutes). If the output format is AAC or MP4, and the maximum file duration is exceeded, the file will be segmented. Value range: 1-1440. Default value: 1440 (24 hours). The maximum file size allowed is 2 GB. If the file size exceeds 2 GB, or the file duration exceeds 24 hours, the file will also be segmented.
This parameter is invalid if the output format is HLS.
         * @type {number || null}
         */
        this.MaxMediaFileDuration = null;

        /**
         * The type of stream to record. `0` (default): The primary stream and substream; `1`: The primary stream; `2`: The substream.
         * @type {number || null}
         */
        this.MediaId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RecordMode = 'RecordMode' in params ? params.RecordMode : null;
        this.MaxIdleTime = 'MaxIdleTime' in params ? params.MaxIdleTime : null;
        this.StreamType = 'StreamType' in params ? params.StreamType : null;

        if (params.SubscribeStreamUserIds) {
            let obj = new SubscribeStreamUserIds();
            obj.deserialize(params.SubscribeStreamUserIds)
            this.SubscribeStreamUserIds = obj;
        }
        this.OutputFormat = 'OutputFormat' in params ? params.OutputFormat : null;
        this.AvMerge = 'AvMerge' in params ? params.AvMerge : null;
        this.MaxMediaFileDuration = 'MaxMediaFileDuration' in params ? params.MaxMediaFileDuration : null;
        this.MediaId = 'MediaId' in params ? params.MediaId : null;

    }
}

/**
 * DescribeStreamIngest request structure.
 * @class
 */
class DescribeStreamIngestRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The SDKAppId of TRTC should be the same as the SDKAppId corresponding to the task room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * The unique Id of the task, will return after successfully starting the task.
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * 
 * @class
 */
class TTSConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * 
         * @type {string || null}
         */
        this.VoiceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VoiceId = 'VoiceId' in params ? params.VoiceId : null;

    }
}

/**
 * The audio parameters for relaying.
 * @class
 */
class McuAudioParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The audio encoding parameters.
         * @type {AudioEncode || null}
         */
        this.AudioEncode = null;

        /**
         * The audio mix allowlist. For the `StartPublishCdnStream` API, if you do not pass this parameter or leave it empty, the audios of all anchors will be mixed. For the `UpdatePublishCdnStream` API, if you do not pass this parameter, no changes will be made to the current allowlist; if you pass in an empty string, the audios of all anchors will be mixed.
In cases where `SubscribeAudioList` and `UnSubscribeAudioList` are used at the same time, you need to specify both parameters. If you pass neither `SubscribeAudioList` nor `UnSubscribeAudioList`, no changes will be made. If a user is included in both parameters, the user’s audio will not be mixed.
         * @type {Array.<McuUserInfoParams> || null}
         */
        this.SubscribeAudioList = null;

        /**
         * The audio mix blocklist. If you do not pass this parameter or leave it empty, there won’t be a blocklist. For the `UpdatePublishCdnStream` API, if you do not pass this parameter, no changes will be made to the current blocklist; if you pass in an empty string, the blocklist will be reset.
In cases where `SubscribeAudioList` and `UnSubscribeAudioList` are used at the same time, you need to specify both parameters. If you pass neither `SubscribeAudioList` nor `UnSubscribeAudioList`, no changes will be made. If a user is included in both parameters, the user’s audio will not be mixed.
         * @type {Array.<McuUserInfoParams> || null}
         */
        this.UnSubscribeAudioList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AudioEncode) {
            let obj = new AudioEncode();
            obj.deserialize(params.AudioEncode)
            this.AudioEncode = obj;
        }

        if (params.SubscribeAudioList) {
            this.SubscribeAudioList = new Array();
            for (let z in params.SubscribeAudioList) {
                let obj = new McuUserInfoParams();
                obj.deserialize(params.SubscribeAudioList[z]);
                this.SubscribeAudioList.push(obj);
            }
        }

        if (params.UnSubscribeAudioList) {
            this.UnSubscribeAudioList = new Array();
            for (let z in params.UnSubscribeAudioList) {
                let obj = new McuUserInfoParams();
                obj.deserialize(params.UnSubscribeAudioList[z]);
                this.UnSubscribeAudioList.push(obj);
            }
        }

    }
}

/**
 * The relaying parameters.
 * @class
 */
class McuPublishCdnParam extends  AbstractModel {
    constructor(){
        super();

        /**
         * The URLs of the CDNs to relay to.
         * @type {string || null}
         */
        this.PublishCdnUrl = null;

        /**
         * Whether to relay to Tencent Cloud’s CDN. `0`: Third-party CDN; `1` (default): Tencent Cloud’s CDN. Relaying to a third-party CDN will incur fees. To avoid unexpected charges, we recommend you pass in a specific value. For details, see the API document.
         * @type {number || null}
         */
        this.IsTencentCdn = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PublishCdnUrl = 'PublishCdnUrl' in params ? params.PublishCdnUrl : null;
        this.IsTencentCdn = 'IsTencentCdn' in params ? params.IsTencentCdn : null;

    }
}

/**
 * The audio transcoding parameters for recording.
 * @class
 */
class AudioParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The audio sample rate.
1: 48000 Hz (default)
2: 44100 Hz
3: 16000 Hz
         * @type {number || null}
         */
        this.SampleRate = null;

        /**
         * The number of sound channels.
1: Mono-channel
2: Dual-channel (default)
         * @type {number || null}
         */
        this.Channel = null;

        /**
         * The audio bitrate (bps). Value range: [32000, 128000]. Default: 64000.
         * @type {number || null}
         */
        this.BitRate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SampleRate = 'SampleRate' in params ? params.SampleRate : null;
        this.Channel = 'Channel' in params ? params.Channel : null;
        this.BitRate = 'BitRate' in params ? params.BitRate : null;

    }
}

/**
 * StopAITranscription response structure.
 * @class
 */
class StopAITranscriptionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * 
 * @class
 */
class WaterMarkTimestamp extends  AbstractModel {
    constructor(){
        super();

        /**
         * The position of the timestamp watermark. Valid values: `0` (top left), `1` (top right), `2` (bottom left), `3` (bottom right), `4` (top center), `5` (bottom center), `6` (center).
         * @type {number || null}
         */
        this.Pos = null;

        /**
         * The time zone. The default is UTC+8.
         * @type {number || null}
         */
        this.TimeZone = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Pos = 'Pos' in params ? params.Pos : null;
        this.TimeZone = 'TimeZone' in params ? params.TimeZone : null;

    }
}

/**
 * 
 * @class
 */
class McuCloudVod extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tencent VOD Parameters
Example :{"ExpireTime":86400}
         * @type {McuTencentVod || null}
         */
        this.McuTencentVod = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.McuTencentVod) {
            let obj = new McuTencentVod();
            obj.deserialize(params.McuTencentVod)
            this.McuTencentVod = obj;
        }

    }
}

/**
 * DescribeCloudModeration request structure.
 * @class
 */
class DescribeCloudModerationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * SDKAppId of TRTC, which is the same as the SDKAppId corresponding to the recording room.
         * @type {number || null}
         */
        this.SdkAppId = null;

        /**
         * Unique ID of the cloud moderation task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SdkAppId = 'SdkAppId' in params ? params.SdkAppId : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * DescribeAITranscription response structure.
 * @class
 */
class DescribeAITranscriptionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The time when the task starts.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Transcription task status. There are 4 values: 1. Idle means the task has not started 2. Preparing means the task is being prepared 3. InProgress means the task is running 4. Stopped means the task has stopped and resources are being cleaned up
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Uniquely identifies a task.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The SessionId filled in when starting the transcription task. If not filled in, nothing is returned.
         * @type {string || null}
         */
        this.SessionId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.SessionId = 'SessionId' in params ? params.SessionId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The Watermark information.
 * @class
 */
class McuWaterMarkParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * The watermark type. Valid values: `0` (default): Image; `1`: Text.
         * @type {number || null}
         */
        this.WaterMarkType = null;

        /**
         * The watermark image information. This parameter is required if `WaterMarkType` is 0.
         * @type {McuWaterMarkImage || null}
         */
        this.WaterMarkImage = null;

        /**
         * The text watermark configuration. This parameter is required if `WaterMarkType` is `1`.
         * @type {McuWaterMarkText || null}
         */
        this.WaterMarkText = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WaterMarkType = 'WaterMarkType' in params ? params.WaterMarkType : null;

        if (params.WaterMarkImage) {
            let obj = new McuWaterMarkImage();
            obj.deserialize(params.WaterMarkImage)
            this.WaterMarkImage = obj;
        }

        if (params.WaterMarkText) {
            let obj = new McuWaterMarkText();
            obj.deserialize(params.WaterMarkText)
            this.WaterMarkText = obj;
        }

    }
}

/**
 * The information of an abnormal user experience and the possible causes.
 * @class
 */
class AbnormalExperience extends  AbstractModel {
    constructor(){
        super();

        /**
         * The user ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * The abnormal experience ID.
         * @type {number || null}
         */
        this.ExperienceId = null;

        /**
         * The room ID (string).
         * @type {string || null}
         */
        this.RoomId = null;

        /**
         * The possible error events.
         * @type {Array.<AbnormalEvent> || null}
         */
        this.AbnormalEventList = null;

        /**
         * The report time.
         * @type {number || null}
         */
        this.EventTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.ExperienceId = 'ExperienceId' in params ? params.ExperienceId : null;
        this.RoomId = 'RoomId' in params ? params.RoomId : null;

        if (params.AbnormalEventList) {
            this.AbnormalEventList = new Array();
            for (let z in params.AbnormalEventList) {
                let obj = new AbnormalEvent();
                obj.deserialize(params.AbnormalEventList[z]);
                this.AbnormalEventList.push(obj);
            }
        }
        this.EventTime = 'EventTime' in params ? params.EventTime : null;

    }
}

/**
 * DescribeCloudSliceTask response structure.
 * @class
 */
class DescribeCloudSliceTaskResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique ID of the slicing task, which is returned after the task is started.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Information about the status of the cloud slicing task. Idle: indicates the current task is idle; InProgress: indicates the current task is in progress; Exited: indicates the current task is being exited.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The room information.
 * @class
 */
class RoomState extends  AbstractModel {
    constructor(){
        super();

        /**
         * The call ID, which uniquely identifies a call.
         * @type {string || null}
         */
        this.CommId = null;

        /**
         * The room ID.
         * @type {string || null}
         */
        this.RoomString = null;

        /**
         * The room creation time.
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * The room termination time.
         * @type {number || null}
         */
        this.DestroyTime = null;

        /**
         * Whether the room is terminated.
         * @type {boolean || null}
         */
        this.IsFinished = null;

        /**
         * The user ID of the room creator.
         * @type {string || null}
         */
        this.UserId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CommId = 'CommId' in params ? params.CommId : null;
        this.RoomString = 'RoomString' in params ? params.RoomString : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.DestroyTime = 'DestroyTime' in params ? params.DestroyTime : null;
        this.IsFinished = 'IsFinished' in params ? params.IsFinished : null;
        this.UserId = 'UserId' in params ? params.UserId : null;

    }
}

/**
 * StartAITranscription response structure.
 * @class
 */
class StartAITranscriptionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Used to uniquely identify a transcription task.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RemoveUser response structure.
 * @class
 */
class RemoveUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

module.exports = {
    ModifyCloudSliceTaskResponse: ModifyCloudSliceTaskResponse,
    DescribeCloudModerationResponse: DescribeCloudModerationResponse,
    AgentConfig: AgentConfig,
    DescribeRecordingUsageResponse: DescribeRecordingUsageResponse,
    SubscribeModerationUserIds: SubscribeModerationUserIds,
    AudioEncodeParams: AudioEncodeParams,
    ServerPushText: ServerPushText,
    McuRecordParams: McuRecordParams,
    MixLayout: MixLayout,
    McuVideoParams: McuVideoParams,
    DescribeTRTCRealTimeScaleDataRequest: DescribeTRTCRealTimeScaleDataRequest,
    StartAIConversationResponse: StartAIConversationResponse,
    StartAIConversationRequest: StartAIConversationRequest,
    DescribeTRTCMarketScaleDataRequest: DescribeTRTCMarketScaleDataRequest,
    McuLayoutVolume: McuLayoutVolume,
    SetUserBlockedRequest: SetUserBlockedRequest,
    DescribeUserEventRequest: DescribeUserEventRequest,
    DeleteCloudModerationRequest: DeleteCloudModerationRequest,
    SetUserBlockedResponse: SetUserBlockedResponse,
    WaterMarkChar: WaterMarkChar,
    DescribeTrtcRoomUsageResponse: DescribeTrtcRoomUsageResponse,
    StopPublishCdnStreamResponse: StopPublishCdnStreamResponse,
    AbnormalEvent: AbnormalEvent,
    DescribeScaleInfoResponse: DescribeScaleInfoResponse,
    ScaleInfomation: ScaleInfomation,
    AgentParams: AgentParams,
    ControlAIConversationResponse: ControlAIConversationResponse,
    StopAITranscriptionRequest: StopAITranscriptionRequest,
    VideoEncodeParams: VideoEncodeParams,
    UpdateAIConversationResponse: UpdateAIConversationResponse,
    DescribeUserEventResponse: DescribeUserEventResponse,
    VideoEncode: VideoEncode,
    DescribeCallDetailInfoRequest: DescribeCallDetailInfoRequest,
    CreateCloudModerationResponse: CreateCloudModerationResponse,
    DescribeTRTCMarketScaleDataResponse: DescribeTRTCMarketScaleDataResponse,
    TranslationConfig: TranslationConfig,
    McuTencentVod: McuTencentVod,
    DescribeWebRecordResponse: DescribeWebRecordResponse,
    DescribeUserInfoRequest: DescribeUserInfoRequest,
    DeleteCloudModerationResponse: DeleteCloudModerationResponse,
    DescribeRelayUsageRequest: DescribeRelayUsageRequest,
    DismissRoomResponse: DismissRoomResponse,
    CloudStorage: CloudStorage,
    DescribeTrtcUsageResponse: DescribeTrtcUsageResponse,
    TimeValue: TimeValue,
    CreateCloudRecordingResponse: CreateCloudRecordingResponse,
    DescribeWebRecordRequest: DescribeWebRecordRequest,
    DescribeTRTCRealTimeScaleDataResponse: DescribeTRTCRealTimeScaleDataResponse,
    DescribeRoomInfoRequest: DescribeRoomInfoRequest,
    StorageParams: StorageParams,
    CloudVod: CloudVod,
    CloudSliceStorage: CloudSliceStorage,
    EmulateMobileParams: EmulateMobileParams,
    DescribeCallDetailInfoResponse: DescribeCallDetailInfoResponse,
    DescribeTRTCRealTimeQualityDataResponse: DescribeTRTCRealTimeQualityDataResponse,
    McuCustomCrop: McuCustomCrop,
    DescribeMixTranscodingUsageRequest: DescribeMixTranscodingUsageRequest,
    DescribeTRTCRealTimeQualityDataRequest: DescribeTRTCRealTimeQualityDataRequest,
    DescribeStreamIngestResponse: DescribeStreamIngestResponse,
    MixTranscodeParams: MixTranscodeParams,
    StopStreamIngestRequest: StopStreamIngestRequest,
    DescribeTRTCMarketQualityDataResponse: DescribeTRTCMarketQualityDataResponse,
    SubscribeStreamUserIds: SubscribeStreamUserIds,
    WaterMarkImage: WaterMarkImage,
    McuUserInfoParams: McuUserInfoParams,
    UserMediaStream: UserMediaStream,
    EventList: EventList,
    DescribeTrtcUsageRequest: DescribeTrtcUsageRequest,
    DescribeRoomInfoResponse: DescribeRoomInfoResponse,
    DismissRoomRequest: DismissRoomRequest,
    StartWebRecordRequest: StartWebRecordRequest,
    StartStreamIngestRequest: StartStreamIngestRequest,
    DescribeAITranscriptionRequest: DescribeAITranscriptionRequest,
    DescribeAIConversationResponse: DescribeAIConversationResponse,
    DescribeUserInfoResponse: DescribeUserInfoResponse,
    RemoveUserByStrRoomIdResponse: RemoveUserByStrRoomIdResponse,
    UpdateStreamIngestResponse: UpdateStreamIngestResponse,
    CloudModerationStorage: CloudModerationStorage,
    McuWaterMarkImage: McuWaterMarkImage,
    StartPublishCdnStreamResponse: StartPublishCdnStreamResponse,
    TrtcUsage: TrtcUsage,
    DeleteCloudSliceTaskResponse: DeleteCloudSliceTaskResponse,
    DescribeRelayUsageResponse: DescribeRelayUsageResponse,
    McuLayout: McuLayout,
    SliceParams: SliceParams,
    ModerationSupplierParam: ModerationSupplierParam,
    DescribeRecordingUsageRequest: DescribeRecordingUsageRequest,
    StorageFile: StorageFile,
    WaterMark: WaterMark,
    McuStorageParams: McuStorageParams,
    DeleteCloudSliceTaskRequest: DeleteCloudSliceTaskRequest,
    MixLayoutParams: MixLayoutParams,
    ModifyCloudSliceTaskRequest: ModifyCloudSliceTaskRequest,
    DescribeMixTranscodingUsageResponse: DescribeMixTranscodingUsageResponse,
    McuFeedBackRoomParams: McuFeedBackRoomParams,
    AudioEncode: AudioEncode,
    RemoveUserRequest: RemoveUserRequest,
    McuLayoutParams: McuLayoutParams,
    DescribeUnusualEventRequest: DescribeUnusualEventRequest,
    DescribeCloudRecordingRequest: DescribeCloudRecordingRequest,
    TencentVod: TencentVod,
    McuPassThrough: McuPassThrough,
    StartWebRecordResponse: StartWebRecordResponse,
    SetUserBlockedByStrRoomIdResponse: SetUserBlockedByStrRoomIdResponse,
    TRTCDataResult: TRTCDataResult,
    DescribeCloudRecordingResponse: DescribeCloudRecordingResponse,
    ModifyCloudModerationRequest: ModifyCloudModerationRequest,
    CreateCloudRecordingRequest: CreateCloudRecordingRequest,
    RecognizeConfig: RecognizeConfig,
    DeleteCloudRecordingResponse: DeleteCloudRecordingResponse,
    StartAITranscriptionRequest: StartAITranscriptionRequest,
    QualityData: QualityData,
    ModerationStorageParams: ModerationStorageParams,
    ModifyCloudRecordingRequest: ModifyCloudRecordingRequest,
    StopAIConversationResponse: StopAIConversationResponse,
    StartPublishCdnStreamRequest: StartPublishCdnStreamRequest,
    DescribeAIConversationRequest: DescribeAIConversationRequest,
    RowValues: RowValues,
    DismissRoomByStrRoomIdRequest: DismissRoomByStrRoomIdRequest,
    StartStreamIngestResponse: StartStreamIngestResponse,
    CreateCloudSliceTaskResponse: CreateCloudSliceTaskResponse,
    DeleteCloudRecordingRequest: DeleteCloudRecordingRequest,
    ModifyCloudModerationResponse: ModifyCloudModerationResponse,
    Terminology: Terminology,
    VideoParams: VideoParams,
    StopStreamIngestResponse: StopStreamIngestResponse,
    SetUserBlockedByStrRoomIdRequest: SetUserBlockedByStrRoomIdRequest,
    DescribeTrtcRoomUsageRequest: DescribeTrtcRoomUsageRequest,
    CreateCloudModerationRequest: CreateCloudModerationRequest,
    WebRecordVideoParams: WebRecordVideoParams,
    UserInformation: UserInformation,
    DescribeScaleInfoRequest: DescribeScaleInfoRequest,
    ControlAIConversationRequest: ControlAIConversationRequest,
    DismissRoomByStrRoomIdResponse: DismissRoomByStrRoomIdResponse,
    DescribeUnusualEventResponse: DescribeUnusualEventResponse,
    ModifyCloudRecordingResponse: ModifyCloudRecordingResponse,
    SingleSubscribeParams: SingleSubscribeParams,
    CreateCloudSliceTaskRequest: CreateCloudSliceTaskRequest,
    ModerationParams: ModerationParams,
    DescribeCloudSliceTaskRequest: DescribeCloudSliceTaskRequest,
    StopPublishCdnStreamRequest: StopPublishCdnStreamRequest,
    MixUserInfo: MixUserInfo,
    EventMessage: EventMessage,
    DescribeTRTCMarketQualityDataRequest: DescribeTRTCMarketQualityDataRequest,
    UpdatePublishCdnStreamRequest: UpdatePublishCdnStreamRequest,
    SliceStorageParams: SliceStorageParams,
    MaxVideoUser: MaxVideoUser,
    UpdateStreamIngestRequest: UpdateStreamIngestRequest,
    StopWebRecordResponse: StopWebRecordResponse,
    STTConfig: STTConfig,
    StopWebRecordRequest: StopWebRecordRequest,
    McuSeiParams: McuSeiParams,
    StopAIConversationRequest: StopAIConversationRequest,
    UpdateAIConversationRequest: UpdateAIConversationRequest,
    UpdatePublishCdnStreamResponse: UpdatePublishCdnStreamResponse,
    McuWaterMarkText: McuWaterMarkText,
    TranscriptionParams: TranscriptionParams,
    SeriesInfos: SeriesInfos,
    RemoveUserByStrRoomIdRequest: RemoveUserByStrRoomIdRequest,
    RecordParams: RecordParams,
    DescribeStreamIngestRequest: DescribeStreamIngestRequest,
    TTSConfig: TTSConfig,
    McuAudioParams: McuAudioParams,
    McuPublishCdnParam: McuPublishCdnParam,
    AudioParams: AudioParams,
    StopAITranscriptionResponse: StopAITranscriptionResponse,
    WaterMarkTimestamp: WaterMarkTimestamp,
    McuCloudVod: McuCloudVod,
    DescribeCloudModerationRequest: DescribeCloudModerationRequest,
    DescribeAITranscriptionResponse: DescribeAITranscriptionResponse,
    McuWaterMarkParams: McuWaterMarkParams,
    AbnormalExperience: AbnormalExperience,
    DescribeCloudSliceTaskResponse: DescribeCloudSliceTaskResponse,
    RoomState: RoomState,
    StartAITranscriptionResponse: StartAITranscriptionResponse,
    RemoveUserResponse: RemoveUserResponse,

}
